我有一些代码尝试加载 C 库,如下所示:-
public ThreadAffinity() {
ctest = (CTest) Native.loadLibrary("ctest", CTest.class);
}
但是在尝试构建项目时出现以下错误;我得到的错误如下:-
UnsatisfiedLinkError: Unable to load library 'libctest': liblibctest.so: cannot open shared object file: No such file or directory
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:166)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:239)
at com.sun.jna.Library$Handler.<init>(Library.java:140)
at com.sun.jna.Native.loadLibrary(Native.java:393)
at com.sun.jna.Native.loadLibrary(Native.java:378)
at com.threads.ThreadAffinity.<init>(ThreadAffinity.java:11)
at com.threads.ThreadAffinity.main(ThreadAffinity.java:45)
当前工作目录是项目的根目录,也是so文件所在的目录。我还尝试修改 LD_PRELOAD 变量以指向我的 so 文件;但是错误仍然存在。
它在我的 OSX 上工作得很好,dylib 正好位于 so 文件当前所在的位置(项目根目录)。 我做错了什么?
最佳答案
来自异常:
UnsatisfiedLinkError: Unable to load library 'libctest': liblibctest.so: cannot open shared object file: No such file or directory
这意味着你使用了类似的东西:
public ThreadAffinity() {
ctest = (CTest) Native.loadLibrary("libctest", CTest.class);
}
而不是:
public ThreadAffinity() {
ctest = (CTest) Native.loadLibrary("ctest", CTest.class);
}
因此您看到 JNA 添加了 lib 的前缀和 .so 的后缀添加到 libctest (liblibctest.so)
关于linux - 无法在 Ubuntu 上的 Eclipse 中从 Java 加载 so 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19150381/