JNI库的UnsatisfiedLinkError

时间:2015-08-21 18:24:22

标签: java path java-native-interface

我有以下Java类在Linux上调用本机库(/usr/local/lib/libCAPJni.so):

public class MyClass {
    private native float runCAP(String name, int[] data);

    private static final String LD_LIBRARY_PATH = "/usr/local/lib";

    static {
        System.setProperty("java.library.path", LD_LIBRARY_PATH);
        System.loadLibrary("CAPJni");
    }
    ...
}

原生图书馆libCAPJni.so位于/usr/local/lib。我还在Eclipse的Build Path -> Native library location中设置了这个lib路径。但是当我在Eclipse中启动我的应用程序时,我收到以下错误:

java.lang.UnsatisfiedLinkError: no CAPJni in java.library.path

这似乎是由/usr/local/lib目录中找不到本机库引起的。但是,如果我在命令行中直接运行以下命令:

java -Djava.library.path=/usr/local/lib MyClass

运行正常没有任何问题。为什么我的Tomcat Web应用程序无法找到本机库?

1 个答案:

答案 0 :(得分:0)

在Eclipse中指定本机库路径绝对可行。 但是,通过设置系统属性,在运行时指定库路径不起作用。必须知道库路径并在引导jvm时设置它。 我还没有和tomcat一起工作但是正如你提到的那样,确保tomcat也以这个参数开头,这可能是你的问题。

编辑: As stated here以后可能实际上可以更改库路径。但是因为这是一个hack并且与类加载器混淆,所以在tomcat环境中使用它很可能不是一个好主意。