java JNI java调用c++

发布于 2021-11-21 20:10:38 字数 722 浏览 837 评论 8

各位师兄师姐好,小弟在java调用c++是出现了一个问题,几天了都没能解决,忘大家帮忙啊

我用eclipse cdt编写完c++代码后并成功编译生成了dll文件,可是在调用的时候出现了如下错误

Exception in thread "main" java.lang.UnsatisfiedLinkError: com.easytoo.union.jni.SUNSONPwd.SUNSON_OpenCom(II)I
	at com.easytoo.union.jni.SUNSONPwd.SUNSON_OpenCom(Native Method)
	at com.easytoo.union.jni.SUNSONPwd.getPinPwd(SUNSONPwd.java:73)
	at com.easytoo.union.impl.UnionPayDeviceImpl.getPinPwd(UnionPayDeviceImpl.java:210)
	at com.easytoo.union.impl.UnionPayDeviceImpl.main(UnionPayDeviceImpl.java:215)



我的c++编译器用的是MinGW。
看到这个错误的大概原因是找不着对应的方法。是怎么回事呢,望大家帮忙一下,都拖了几天了,公司给压力啊

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

坚持沉默 2021-11-26 18:40:10

牛气

惜醉颜 2021-11-26 18:40:08

楼主用的是动态匹配还是静态的?

南汐寒笙箫 2021-11-26 18:40:08

找到了解决办法了,我采用的是c编译器,所以编译出来的方法有问题,应该采用c++编译器.

德意的啸 2021-11-26 18:39:56

我用Android的NDK实现了java调用C++,编译没啥问题,为什么不用NDk呢

好听的两个字的网名 2021-11-26 18:39:43

我知道是什么原因,但是不知道怎么解决,

问题是是MinGW编译器在编译的时候,是按照自己的方式进行编译的,没有按照java要求的方式进行编译,编译的方法名不标准,因此java在寻找方法的时候找不到该方法报错,我调试过,确实是。我通过dllexp工具查看到dll里的函数和java寻找的函数名称不一样,如下:

minGw生成的函数名:_Z52Java_com_easytoo_union_jni_SUNSONPwd_SUNSON_1OpenComP7JNIEnv_P8_jobjectll@16

而java寻找的方法是:_Java_com_easytoo_union_jni_SUNSONPwd_SUNSON_1OpenCom@16

我用visual studio试过,生成的方法正好是_Java_com_easytoo_union_jni_SUNSONPwd_SUNSON_1OpenCom@16,所有用visual studio生成的dll库不会报错,但是用MinGw就不行了,但是我要在linux下运行,不是在windows下运行,请问我该怎么设置MinGw的编译参数生成指定函数名称呢。

顾忌 2021-11-26 12:54:39

请继续折腾  技术是折腾出来的

静谧 2021-11-26 09:30:04

保证你动态库在PATH下面,然后重启eclipse,运行java。如果还不行,查看eclipse的details的configuration,找到java.library.path变量,看看这个变量是否包含了你那个dll所在的路径。如果不包含,说明重启eclipse无效,重启一下机器。重启机器还不行,就只能用depends.exe看看是不是还有哪些动态库缺失

野心澎湃 2021-11-22 18:50:49

帮顶。  不如试试
JNA 来得方便

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文