【发布时间】:2014-07-05 20:02:08
【问题描述】:
我有一个包含两个类的 Eclipse 项目。 “SomeClass1”类有一个本地方法:
SomeClass1
public class SomeClass1 {
static {
System.loadLibrary("libname"); // Load the native library.
}
public native void some_method(); // implemented in the library
// .... other non methods ....
}
另一个类“SomeClass2”使用“SomeClass1”的本机方法。喜欢:
SomeClass2
public class SomeClass2{
public static void main(String[] args) {
SomeClass1 s = new SomeClass1();
s.some_method();
}
// ....other methods....
}
但是,当它调用该方法时,它会抛出如下错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no libname in java.library.path
....
at java.lang.System.loadLibrary(Unknown Source)
at x.x.x.SomeClass1.<clinit>(SomeClass1.java:128)
at SomeClass2.main(SomeClass2.java:10)
我认为该错误与 java 不知道在哪里查找本机库有关。
问题1 当我使用: -Djava.library.path="C:\Users.....\libfolder\" 作为 eclipse 中的运行参数并打印以下值时: System.getProperty("java.library.path");我看到打印了很多目录,但没有看到我在参数中指定的目录。我做错了什么?
问题2 当我这样做时: System.loadLibrary("name");我需要调用库“name.so”还是“libname.so”?
问题3 如果找到该库但它是一个 64 位库,而它加载的平台是 32 位,它是否也会给出 unsatisfiedLinkError 或会给出不同的错误?
问题4 我可以指定相对于项目文件夹或相对于加载库的文件的库路径吗?
希望你能回答我的(部分)问题。
格兹·斯特凡
【问题讨论】:
-
问题 2:您的示例库路径表明您在 Windows 上,所以它是
name.dll
标签: java eclipse native unsatisfiedlinkerror