我有以下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应用程序无法找到本机库?
答案 0 :(得分:0)
在Eclipse中指定本机库路径绝对可行。 但是,通过设置系统属性,在运行时指定库路径不起作用。必须知道库路径并在引导jvm时设置它。 我还没有和tomcat一起工作但是正如你提到的那样,确保tomcat也以这个参数开头,这可能是你的问题。
编辑: As stated here以后可能实际上可以更改库路径。但是因为这是一个hack并且与类加载器混淆,所以在tomcat环境中使用它很可能不是一个好主意。