我已经阅读了许多类似的问题,但仍然对这个项目感到困惑。我正在 Ubuntu 11.04 64 位上使用 Eclipse 尝试一个非常简单的 JNI 项目。
我已经正确构建了我的 .so 文件。我知道这一点,因为当我从 Java 程序中使用 System.load("/exact/path/to/my/libcproject.so") 时,我可以调用它。但是当我尝试使用 System.loadLibrary("libcproject") 我得到一个不满意的链接错误。
这是我的简单Java程序:
package pkg;
public class MyClass {
static {
System.out.println("java.library.path: " + System.getProperty("java.library.path"));
System.loadLibrary("libcproject");
}
private native String foo(String input);
public static void main(String[] args) {
MyClass mc = new MyClass();
String output = mc.foo("input");
System.out.println(output);
}
}
如您所见,我正在打印 java.library.path 是什么。当我运行程序时,我得到:
java.library.path: /usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/amd64/server:/usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/amd64:/usr/lib/jvm/java-6-sun-1.6.0.26/jre/../lib/amd64:/home/mlevin/workspace/cproject/Debug:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
input
“输入”是我的 C 函数返回的内容(它只是把你给它的东西还给你)。
如果我将 System.load 调用更改为 System.loadLibrary("libcproject"),我会收到 unsatisfied link 错误,即使从输出 /home/mlevin/workspace/cproject/Debug 中可以看出,这是在哪里libcproject.so 存在,位于 java.library.path 中。
java.library.path: /usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/amd64/server:/usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/amd64:/usr/lib/jvm/java-6-sun-1.6.0.26/jre/../lib/amd64:/home/mlevin/workspace/cproject/Debug:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
Exception in thread "main" java.lang.UnsatisfiedLinkError: no libcproject in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at pkg.MyClass.<clinit>(MyClass.java:7)
Could not find the main class: pkg.MyClass. Program will exit.
在这一点上我很困惑。有什么建议么?
谢谢