linux - 无法在 Ubuntu 上的 Eclipse 中从 Java 加载 so 文件

标签 linux ubuntu shared-libraries jna

我有一些代码尝试加载 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/

相关文章:

系统 ("$BASHPID"的 C 函数)不工作

linux - Grep:列出 'per-file' 结果

python - 为 Ad Block Plus 安装 abpcrawler 失败

windows - 将 .DLL 转换为 .SO

c - 如何将工作区库添加到 Eclipse CDT autotools C/C++ 项目?

javascript - 哪些 vscode 配置文件要在新系统上恢复以重复设置?

c - Scanf() 调用另一个函数后增加

python - 更新 puppet 中的包?

sql-server - 无法在 ubuntu 20 中安装 SQLserver 工具

c++ qt未定义对`_imp的引用