静态加载的 Java JNI UnsatisfiedLinkError

标签 java java-native-interface

我需要将 JNI dll 链接到我的 Java 应用程序,这是代码:

static
    {
        System.load("c:\\boca\\java\\BocaWorld.dll");
    }

这就是错误

Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\boca\java\BocaWorld.dll: Can't find dependent libraries

我可以解决将所有dll放入JRE/bin文件夹中的问题,但为什么第一种方法不起作用?我不想将所有 dll 复制到 JRE 文件夹中。

最佳答案

您仅提供了单个 native 库的路径,它的所有依赖项都在预定义路径下搜索,而不是您为具体库设置的路径。您可以尝试为您的应用程序设置 java.library.path 系统属性,指向包含 native 库的文件夹。该属性用于定位 native 库。

您可以通过命令行参数进行设置,例如:

java -Djava.library.path=<path_to_libs> <main_class>

或者通过System.setProperty,例如:

System.setProperty(“java.library.path”, “/path/to/library”);

此外,您可以跳过 lib 的路径,因为您设置了此属性,因为 JVM 会在您设置的路径下搜索它,所以它可能是这样的:

static
{
    System.setProperty(“java.library.path”, “c:\\boca\\java\\”);
    System.loadLibrary("BocaWorld.dll");
}

但不要忘记,java.library.path 已经可以包含一些路径,因此您可以使用 ; 作为分隔符添加新路径。

关于静态加载的 Java JNI UnsatisfiedLinkError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33450842/

相关文章:

c - 在结构中使用 Option<unsafe fn ...> 的奇怪内存布局

android - "iwconfig"命令需要 root android 设备吗?

java - 如何查找包

java - JNI 中的 GetByteArrayRegion

java - 使用 x86_64-w64-mingw32-g++ 编译 JNI C++ native 代码

java - 从字符串中删除重复项

java - 在 JLabel 图标上添加 JLabel 文本。使用相同的 JLabel 文本

java - 将日历对象转换为格式为 "yyyy-mm-dd hh:mm:ss"的 java 字符串

java - 使用 JtextField 创建自定义 JRadioButton?

java - 如何获取我最后的谷歌地图位置?