首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何修复JNI项目中的UnsatisfiedLinkError (找不到依赖库)

如何修复JNI项目中的UnsatisfiedLinkError (找不到依赖库)
EN

Stack Overflow用户
提问于 2011-05-23 10:14:11
回答 18查看 369.3K关注 0票数 91

我正在做一个使用JNI的Java项目。JNI调用一个我自己编写的定制库,假设是mylib.dll,这依赖于第三方库libsndfile-1.dll。

当我运行我的程序时,它崩溃了

代码语言:javascript
复制
java.lang.UnsatisfiedLinkError:  C:\...path...\mylib.dll: Can't find dependent libraries.

我已经搜索了这个站点(和其他站点),并尝试了一些修复:

  1. 我运行了依赖遍历。DW给出了一些警告-- libsndfile所需的两个库,MPR.DLL和SHLWAPI.DLL,有“未解决的导入”--但是DW FAQ说可以安全地忽略这些警告。
  2. I修复了mylib.dll中的方法名称,就像建议的here一样。方法名称被编译器弄乱了,但是我添加了链接器标志,并且dll方法名称现在与我的jni头文件中的名称完全匹配。
  3. 我将所有这些dll放在相同的目录中--与调用它们的.jar相同的目录--以确保它们位于正确的路径上。

没有骰子。

有人知道这是怎么回事吗?

我在Visual Studio2010中使用MacBook pro进行开发(通过Parallels)。我在一台东芝笔记本电脑上进行Windows XP测试。

EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2011-05-23 11:36:16

我非常确定类路径和共享库搜索路径几乎没有什么关系。根据The JNI Book (诚然很旧)的说法,在Windows上,如果不使用java.library.path系统属性,DLL需要位于当前工作目录中,或者位于Windows PATH环境变量中列出的目录中。

更新:

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

此外,您还可以阅读OracleHTML版的JNI Specification。它位于Java网站的Java 8部分,因此有望在一段时间内出现。

更新2:

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

代码语言:javascript
复制
java -XshowSettings:properties -version

要查找共享库搜索路径,请执行以下操作。在该输出中查找java.library.path属性的值。

票数 57
EN

Stack Overflow用户

发布于 2012-05-11 18:20:30

我想告诉你这个有趣的例子,在尝试了上面所有的方法之后,错误仍然存在。奇怪的是,它可以在Windows7电脑上运行,但在Windows XP上就不行。然后我使用了依赖遍历,发现在Windows XP上没有我的动态链接库要求的VC++运行时。在安装了VC++运行时包here之后,它就像一个护身符一样工作。让我不安的是,它不断地告诉我找不到依赖库,而直观地说依赖于JNI的dll就在那里,然而最终发现依赖于JNI的dll需要另一个依赖的dl。我希望这能帮到你。

票数 22
EN

Stack Overflow用户

发布于 2014-08-07 23:13:28

您需要加载JNI库。

从JVM路径(JDK bin路径)加载DLL。

如果要加载带有路径的显式文件,请使用()

另请参阅:Difference between System.load() and System.loadLibrary in Java

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6092200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档