为了账号安全,请及时绑定邮箱和手机立即绑定

如何在JNI项目中修复UnsatisfiedLinkError(无法找到依赖库)

如何在JNI项目中修复UnsatisfiedLinkError(无法找到依赖库)

斯蒂芬大帝 2019-07-30 16:27:46
如何在JNI项目中修复UnsatisfiedLinkError(无法找到依赖库)我正在开发一个使用JNI的Java项目。JNI调用我自己编写的自定义库,比如mylib.dll,这取决于第三方库libsndfile-1.dll。当我运行我的程序时,它崩溃了java.lang.UnsatisfiedLinkError:  C:\...path...\mylib.dll: Can't find dependent libraries.我搜索了这个网站(和其他人),我尝试了一些修复:我跑了依赖沃克。DW给出了一些警告 - libsndfile,MPR.DLL和SHLWAPI.DLL所需的两个库具有“未解析的导入” - 但DW FAQ表示可以安全地忽略这些警告。我修复了mylib.dll中的方法名称,如此处所示。方法名称在某种程度上被编译器破坏了,但我添加了链接器标志,现在dll方法名称与我的jni头文件中的名称完全匹配。我将所有这些DLL放在同一目录中 - 与调用它们的.jar相同的目录 - 以确保它们位于正确的PATH上。没有骰子。有谁知道发生了什么事?我正在使用MacBook pro(通过Parallels)在Visual Studio 2010中进行开发。我正在使用toshiba笔记本电脑在Windows XP上进行测试。
查看完整描述

3 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

我很确定classpath和共享库搜索路径彼此之间几乎没有关系。根据JNI Book(不可否认,旧版),如果您不使用java.library.path系统属性,则在Windows上,DLL需要位于当前工作目录或Windows PATH环境变量中列出的目录中。


更新:

看起来Oracle已从其网站上删除了PDF。我已经更新了上面的链接,指向生活在德克萨斯大学阿灵顿分校的PDF实例。

此外,您还可以阅读Oracle的JNI规范的HTML版本。它存在于Java网站的Java 8部分中,因此希望能够存在一段时间。


更新2:

至少在Java 8中(我没有检查过早期版本)你可以这样做:

java -XshowSettings:properties -version

找到共享库搜索路径。java.library.path在该输出中查找属性的值。


查看完整回答
反对 回复 2019-07-30
  • 3 回答
  • 0 关注
  • 378 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号