我有一个 Java 程序,它通过我试图在 Linux 上运行的 JNI 调用 C 代码。外部代码由两个 .so 文件组成:一个用于 JNI 绑定(使用 swig 构建),另一个用于实际功能。我在同一个目录中有两个库,并且 LD_LIBRARY_PATH 设置正确。ldd 从命令行运行时没有报告任何问题,但是当我在 Eclipse 编辑器的“运行配置”对话框中将 LD_LIBRARY_PATH 设置为相同的值并尝试执行程序时,会出现以下错误:
java.lang.UnsatisfiedLinkError: [path to libraries]/[JNI binding library].so: [actual code library].so: cannot open shared object file: No such file or directory
这使我相信 JNI 包装器库已成功加载,但是当该库尝试加载包含实际代码的库时会失败。有什么办法可以进一步调试吗?
我将进一步指出,这个问题发生在 eclipse 编辑器本身中,并且我没有尝试将代码打包到 jar 中并在独立的 jvm 实例中运行它。