当前位置: 首页 > 面试题库 >

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

戴霖
2023-03-14
问题内容

我正在使用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中进行测试。


问题答案:

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

java -XshowSettings:properties -version

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



 类似资料:
  • 我尝试了Hello world JNI,来自: http://home.pacifier.com/~mmead/jni/cs510ajp/ 我学习了Java类: 然后打电话进来: cpp文件如下所示: 我已切换到JDK x86并使用x86编译: 我使用了QT文件夹中的MINGW32的gcc(希望没问题) 注意:我必须添加共享,否则会出现错误: 请注意,我已经确保运行的是x32 jdk的java,并

  • 我正在从事一个使用JNI的Java项目。JNI调用我自己编写的自定义库,比如mylib。这取决于第三方库libsndfile-1。dll。 当我运行我的程序时,它会崩溃 我搜索了这个网站(和其他网站),并尝试了一些修复: > 我修复了mylib中的方法名称。dll,如此处所建议。方法名称不知怎么被编译器弄乱了,但我添加了链接器标志,dll方法名称现在与jni头文件中的名称完全匹配。 我将所有这些D

  • 我收到这个错误消息 mylib。dll是一个JNI包装器,它使用其他C库。 当我打开mylib时。dll带有依赖项遍历器它显示所有依赖库都可用! 有没有办法检查java中找不到哪个库? 我用Visual Studio编译了第三方库,用mingw32编译了mylib。这可能是个问题吗?

  • 当我尝试构建我的项目时,我遇到了这些错误,它似乎认为我有两个相同的库,但我不确定为什么: 这是我的build.gradle文件 这是我的顶级gradle构建文件: { } 我想这个错误发生在升级到Android Studio后,但我不记得了。我的Android Studio版本现在是3.2.1。我能够让这个项目以前建立。

  • 在LoginStorageProviderFactory中,它有一个来自LoginStorageProvier的导入,在最后一个类中,它有一个来自外部项目(也是我的项目)中的用户类的导入。 如果我把这个用户类移到jar模块中,错误就会消失,并且一切都能很好地工作;但我的目标是将项目与用户在其他项目中的实现和EAR项目分离。 所以,我认为错误的原因是缺少依赖项,Maven不能解决它,也没有报告错误,

  • 我和我的朋友正在做一个Java maven项目,它的设置和我们从Git得到的项目是一样的。在我的设置中,Maven正确地导入了所有依赖项,但对于我的朋友,它找不到任何依赖项。 我们尝试过的事情: 右键单击project,单击maven并单击Reimport。 我们都可以上网,所以这也不是问题。而且,Maven在IntelliJ中设置为自动导入。