Eclipse下使用JNI调用C

本文详细介绍了如何在Windows环境下使用Eclipse、JDK、TDM-GCC及CDT插件集成Java Native Interface (JNI) 开发环境。通过创建Java项目、配置C/C++环境、编写JNI代码并编译链接DLL,最终实现Java调用本地C函数的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文采用的配套软件版本:

Windows 10 64位

Eclipse Version: 2018-09 (4.9.0)

jdk-8u191

tdm64-gcc-5.1.0-2 官网地址:http://tdm-gcc.tdragon.net/download (下载地址:https://download.youkuaiyun.com/download/axwolfer/10931095

Eclipse 插件 CDT 9.4

参考教程:http://www3.ntu.edu.sg/home/ehchua/programming/java/javaNativeInterface.html

Demo下载:https://download.youkuaiyun.com/download/axwolfer/10931092

 

1、安装JDK

2、安装Eclipse

3、安装TDM

安装完成后,进入到安装目录(我的安装目录是C:\TDM-GCC-64)下的bin目录,将文件mingw32-make.exe复制一份,修改名称为make.exe

将JDK的inlude文件夹下的jni.h和include/win32下的jni_md.h文件COPY到TDM-GCC-64的include(我本地路径是C:\TDM-GCC-64\include)文件夹和x86_64-w64-mingw32\include(我本地路径是C:\TDM-GCC-64\x86_64-w64-mingw32\include)文件夹下

4、打开Eclipse,在菜单栏中选择“Help-Eclipse Maketplace...”,在Find中输入CDT,搜索到CDT后单击Install进行安装,安装后重启Eclipse

5、采用default包名的案例:

5.1 创建一个名为HelloJNI的Java Project项目

5.2 在HelloJNI中创建一个名为HelloWorld的java类,其内容如下:

public class HelloWorld {
	static {
		System.loadLibrary("hello"); //加载hello.dll
	}
	
	public native void sayHello();
	
	// 测试
	public static void main(String[] args) {
		new HelloWorld().sayHello();
	}
}

5.3 创建.h头文件: 在HelloWorld.java文件上右键,选择“New-Other”,在弹出的向导里选择“Convert to a C/C++ Project(Adds C/C++ Nature)”

5.4 在HelloJNI项目节点上右键,选择新建文件夹,命名为jni,我们把C相关的代码都放到这个目录下

5.5 在jni文件夹上右键,新建文件,命名为Makefile,其内容如下:

# Define a variable for classpath
CLASS_PATH = ../bin

# Define a virtual path for .class in the bin directory
vpath %.class $(CLASS_PATH)

all : hello.dll

# $@ matches the target, $< matches the first dependency
hello.dll : HelloWorld.o
	gcc -Wl,--add-stdcall-alias -shared -o $@ $<

# $@ matches the target, $< matches the first dependency
HelloWorld.o : HelloWorld.c HelloWorld.h
	gcc -c $< -o $@

# $* matches the target filename without the extension
HelloWorld.h : HelloWorld.class
	javah -classpath $(CLASS_PATH) $*

5.6 在jni文件夹节点上右键,选择“Build Targets->Create”,在弹出的创建对话框中输入HelloWorld.h,如下图:

5.7 在创建的Build Targets下选择HelloWorld.h节点,右键选择Build Targets,执行后会在jni下生成HelloWorld.h文件

5.8 在jni下新建Source file,命名为HelloWorld.c,内容如下:

#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"

JNIEXPORT void JNICALL Java_HelloWorld_sayHello(JNIEnv *env, jobject thisObj) {
   printf("Hello World! god\n");
   return;
}

5.9 如5.6操作,创建all,然后如5.7执行对应BuildTargets,在jni目录下会生成hello.dll文件

5.10 选择HelloWorld.java,右键选择"Run as->Run configurations",在弹出的对话框中选择Arguments,在VM arguments中设置dll的目录,本例中是: -Djava.library.path=jni

5.11 执行HelloWorld.java,按预期打印出了信息

6、采用自定义包名的案例

如果我们创建了自己的pacage,在Makefile中需要对应的做修改。

本例中我的包名是test,在test包中新建了HelloJNI.java,Makefile中增加如下内容:

HelloJNI : HelloJNI.dll

HelloJNI.dll : HelloJNI.o
	gcc -Wl,--add-stdcall-alias -shared -o $@ $<

HelloJNI.o : HelloJNI.c HelloJNI.h
	gcc -c $< -o $@

# HelloJNI.class is located in test folder
HelloJNI.h : test/HelloJNI.class
	javah -classpath $(CLASS_PATH) test.$*

clean :
	rm HelloWorld.h HelloWorld.o hello.dll

其他操作类似。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值