Eclipse中使用jni调用dll库

因为工作需要老板要我完成一个已经别人写好的C++的一个库来调用它,这里就需要jni了,= =我还是第一次接触jni的小萌新。经过一早上的查找资料总算是完成了一个HelloWorld。下面直接上图,我也是萌新。讲的可能不是很清楚,请指正。

   1、 我用的是Eclipse Mars2.先下载CDT,下载方法Eclipse》help》Ecipse Marketplace

2、下载MinGW-w64,这里推荐MinGW-w64,MinGW很久就已经很不更新了。下载地址:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/mingw-w64-v5.0.3.tar.bz2/download

3、安装好后配置环境变量:

按你自己实际安装的路径来,这里我是安装到了D盘。

3、打开CMD查看MinGW是否配置成功。

输入g++ --version、gdb --version、gcc --version若出现这个则配置成功了。

4、打开Eclipse,创建名为JNI Test的Java项目。再创建包com.example.jni,创建JNITest.class.如下图:

5、打开JNITest.class添加以下代码:

package com.example.jni;


public class JNITest {
static {
// 调用文件名为JNI Library.dll的动态库
System.loadLibrary("JNI Library");
}


public static void main(final String[] args) {
new JNITest().hello();
}


// native方法声明
public native void hello();

}

6、打开Eclipse的工作路径,打开JNI Test》bin,如下图:


7、按住Shift + 右击点击在此处打开PowerShell命令行。

8、输入以下命令:javah -classpath  . -jni com.example.jni.JNITest,这时候会发现会出现c++的头文件:

9、返回Eclipse,新建名为JNI Library的C++项目,将上面生成的头文件拷进项目中去。

10、这里先添加jni.h,jni_mk.h文件先,这里有两种方法:

    (1)、去jdk安装目下include文件夹下的jni.h和include文件夹下win32文件夹里面jni_md.h文件一同拷入项目中去

    (2)、右击项目》选择properties,

11、实现方法:打开头文件,红框内的就是我们需要实现的方法,

这里我们创建一个JNI Library.cpp文件。将以下代码复制进去:

#include <iostream>
#include "com_example_jni_JNITest.h"
using namespace std;


JNIEXPORT void JNICALL Java_com_example_jni_JNITest_hello
  (JNIEnv *, jobject) {
printf("你好");

}

12、下面我们要生成动态的dll文件,这里之前我们要弄点准备工作,右击项目》properties。



将xcopy "${BuildArtifactFilePrefix}${BuildArtifactFileName}" "${workspace_loc:/JNI Test/resources/}" /Y复制到Command

,在选择Build Artifact。

弄好以上后回到Tool Settings,将-Wl,--add-stdcall-alias填到如下图所示,

最后在弄好以上操作。

14、弄好以上的准备工作后右击项目build project。此时工作台会输出如下:

13:02:44 **** Incremental Build of configuration Debug for project JNI Library ****
Info: Internal Builder is used for build
g++ "-ID:\\Radix\\jdk1.7\\include" "-ID:\\Radix\\jdk1.7\\include\\win32" -O0 -g3 -Wall -c -fmessage-length=0 -o "JNI Library.o" "..\\JNI Library.cpp" 
g++ -Wl,--add-stdcall-alias -shared -o "JNI Library.dll" "JNI Library.o" 
xcopy "JNI Library.dll" "F:\\workspace\\JNI Test\\resources" /Y 
F:JNI Library.dll
复制了 1 个文件


13:02:45 Build Finished (took 1s.846ms)

java项目里面也会多出resouces文件夹:


这时候我们需要制定动态库,将-Djava.library.path="${workspace_loc}/JNI Test/resources;${env_var:PATH}拷到如下图


下面运行main方法如下图:至此我们已经成功的使用jni调用了c++函数



总结:

1、第一次接触这jni不是很熟悉,也不是很懂c++项目

2、网上关于javah输出头文件这里很多都是错误的,我输入了javah 。。。。,或者是javah -jni 。。。。。,或者多是javah -classpath 。。。。都是错误的。这里参考自:https://blog.csdn.net/qiujuer/article/details/41644075

3、结合百度经验的分享感谢此巨巨让我成功弄好一大半。地址:https://jingyan.baidu.com/album/9c69d48f53575d13c9024ec1.html?picindex=3

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值