我需要将 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/