用于静态加载的Java JNI UnsatisfiedLinkError

时间:2015-10-31 11:06:37

标签: 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文件夹中。

1 个答案:

答案 0 :(得分:0)

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

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

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已经包含了一些路径,因此您可以使用;作为分隔符添加新路径。