gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 11:50:52 26 4
gpt4 key购买 nike

我正在开发一个使用 JNI 的 Java 项目。 JNI 调用我自己编写的自定义库,比如说 mylib.dll,它依赖于第 3 方库 libsndfile-1.dll。

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

java.lang.UnsatisfiedLinkError:  C:\...path...\mylib.dll: Can't find dependent libraries.

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

  1. 我运行了依赖walker。 DW 给出了几个警告——libsndfile 所需的两个库,MPR.DLL 和 SHLWAPI.DLL,有“未解析的导入”——但是 DW FAQ表示可以安全地忽略这些警告。

  2. 我按照建议 here 修复了 mylib.dll 中的方法名称.方法名称不知何故被编译器弄乱了,但我添加了链接器标志,现在 dll 方法名称与我的 jni 头文件中的名称完全匹配。

  3. 我将所有这些 DLL 放在同一个目录中 - 与调用它们的 .jar 相同的目录 - 以确保它们位于正确的 PATH 上。

没有骰子。

有人知道发生了什么吗?

我正在 MacBook Pro 上(通过 Parallels)在 Visual Studio 2010 中进行开发。我正在东芝笔记本电脑上的 Windows XP 中进行测试。

最佳答案

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


更新:

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

此外,您还可以阅读 Oracle 的 HTML 版本的 JNI Specification .它位于 Java 网站的 Java 8 部分,因此希望会存在一段时间。


更新 2:

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

java -XshowSettings:properties -version

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

关于java - 如何修复 JNI 项目中的 UnsatisfiedLinkError(找不到依赖库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6092200/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com