Eclipse+JNI+MinGW编写C++,调用dll入门

在Eclipse下利用JNI调用C++的函数,遇到了很多问题,经过一番折腾,终于走通整个过程。


一、准备工作。

1、下载Eclipse CDT插件,让Eclipse支持C++的开发。我使用的是Eclipse Luna,已经集成了CDT插件。

2、安装windows下的C++编译环境MinGW。配置MinGW的环境变量,在path中添加%MinGW%\bin的安装路径:我的为C:\MinGW\bin,其他环境变量都无需进行配置。


二、代码示例。

1、新建一个java project ,命名为JniTest,主类为HelloJni.java,代码如下:

public class HelloJni {
	public native void displayHelloJni();

	static {
		System.loadLibrary("libHelloJni");
	}

	public static void main(String[] args) {
		System.out.println(System.getProperty("java.library.path"));
		new HelloJni().displayHelloJni();
	}

}

2、利用javah生成HelloJni.java中本地函数displayHelloJni对应的头文件。打开cmd,进入HelloJni所在目录,输入命令:javah HelloJni,执行后在同一级目录下生产HelloJni.h。


3、新建一个C++项目,如下图,注意,项目的名称将决定生成的dll文件的名字(当然生成dll后也可以重命名)。




4、将HelloJni.h复制到新建的C++项目HelloJni中,新建一个C++源文件HelloJni.cpp,实现头文件中的方法,HelloJni.cpp的内容如下:

#include <jni.h>
#include "HelloJni.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloJni_displayHelloJni
  (JNIEnv * env, jobject obj){
	printf("Hello JNI!\n");
	return;
}
此时,编译会提示找不到jni.h,需要在项目属性中进行设置,如下图:


此外,还要进行如下设置,在Build----Settings----Tool Settings-----MinGW C++ Linker目录栏下的Miscellaneous选项下,在linker flags处填入:-Wl,--add-stdcall-alias,否则编译出的dll,在调用时,会报java.lang.UnsatisfiedLinkError错误,提示找不到方法。



此时就可以成功编译出libHelloJni.dll了。


5、将libHelloJni.dll复制到JniTest项目的libs文件夹下,libs文件夹自己创建,和src在同一级目录下,方便管理dll文件。为了让程序执行时能找到dll,有两种方式进行设置:方法一、设置Native library Location,如下图:



方法二、设置运行时的参数,依次点击run as---run configurations,在点击Arguments,在Vm arguments处填入如下:-Djava.library.path="${workspace_loc}\JniTest\libs;${env_var:PATH}"。


最后一点要注意的是,因为dll由MinGW生产,是32位dll,如果使用64位jdk调用会出现错误,所以JniTest项目必须使用32位jdk编译,或者安装MinGW-w64,重新生成一个64位dll给64位的jdk使用。至此,示例结束,运行HelloJni,控制台输入消息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值