我正在做一个使用JNI的Java项目。JNI调用一个我自己编写的定制库,假设是mylib.dll,这依赖于第三方库libsndfile-1.dll。
当我运行我的程序时,它崩溃了
java.lang.UnsatisfiedLinkError: C:\...path...\mylib.dll: Can't find dependent libraries.
我已经搜索了这个站点(和其他站点),并尝试了一些修复:
没有骰子。
有人知道这是怎么回事吗?
我在Visual Studio2010中使用MacBook pro进行开发(通过Parallels)。我在一台东芝笔记本电脑上进行Windows XP测试。
发布于 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中(我还没有检查过早期版本),你可以这样做:
java -XshowSettings:properties -version
要查找共享库搜索路径,请执行以下操作。在该输出中查找java.library.path
属性的值。
发布于 2012-05-11 18:20:30
我想告诉你这个有趣的例子,在尝试了上面所有的方法之后,错误仍然存在。奇怪的是,它可以在Windows7电脑上运行,但在Windows XP上就不行。然后我使用了依赖遍历,发现在Windows XP上没有我的动态链接库要求的VC++运行时。在安装了VC++运行时包here之后,它就像一个护身符一样工作。让我不安的是,它不断地告诉我找不到依赖库,而直观地说依赖于JNI的dll就在那里,然而最终发现依赖于JNI的dll需要另一个依赖的dl。我希望这能帮到你。
发布于 2014-08-07 23:13:28
您需要加载JNI库。
从JVM路径(JDK bin路径)加载DLL。
如果要加载带有路径的显式文件,请使用()
另请参阅:Difference between System.load() and System.loadLibrary in Java
https://stackoverflow.com/questions/6092200
复制相似问题