java JNI java调用c++
各位师兄师姐好,小弟在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)
看到这个错误的大概原因是找不着对应的方法。是怎么回事呢,望大家帮忙一下,都拖了几天了,公司给压力啊
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
牛气
楼主用的是动态匹配还是静态的?
找到了解决办法了,我采用的是c编译器,所以编译出来的方法有问题,应该采用c++编译器.
我用Android的NDK实现了java调用C++,编译没啥问题,为什么不用NDk呢
我知道是什么原因,但是不知道怎么解决,
问题是是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的编译参数生成指定函数名称呢。
请继续折腾 技术是折腾出来的
保证你动态库在PATH下面,然后重启eclipse,运行java。如果还不行,查看eclipse的details的configuration,找到java.library.path变量,看看这个变量是否包含了你那个dll所在的路径。如果不包含,说明重启eclipse无效,重启一下机器。重启机器还不行,就只能用depends.exe看看是不是还有哪些动态库缺失
帮顶。 不如试试
JNA 来得方便