一尘不染

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

java

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

当我运行程序时,它崩溃

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

我搜索了该网站(和其他网站),并尝试了许多修复程序:

  1. 我跑了依赖沃克。DW发出了一些警告-libsndfile所需的两个库MPR.DLL和SHLWAPI.DLL具有“未解决的导入”-但DW FAQ表示可以安全地忽略这些警告。
  2. 我已按照此处的建议将方法名称固定在mylib.dll中。方法名称已经被编译器弄乱了,但是我添加了链接器标志,并且dll方法名称现在与我的jni头文件中的名称完全匹配。
  3. 我将所有这些DLL放在相同的目录中-与调用它们的.jar相同的目录中-以确保它们在正确的PATH上。

没有骰子。

有人知道发生了什么吗?

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


阅读 585

收藏
2020-03-09

共1个答案

一尘不染

少在Java 8中(我没有检查早期版本),你可以执行以下操作:

java -XshowSettings:properties -version

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

2020-03-09