无法打开共享对象文件 - Java 中的 C++ 库

Cannot Open Shared Object file - C++ library in Java

我正在尝试在我的 Java 代码中使用 C++ 编译库。我将 java.library.path 设置为 /usr/local/lib/ 并且我在那里安装了库的所有 .so 文件。

但是,当我尝试 运行 Java 应用程序时,我看到以下内容:

Native code library failed to load. 
java.lang.UnsatisfiedLinkError: /usr/local/lib/libA.so: libB.so.2.4: cannot open shared object file: No such file or directory

但是文件似乎在那里:

ls /usr/local/lib/libB.so.2.4
lrwxrwxrwx 1 root root 20 Jan 24 16:33 /usr/local/lib/libB.so.2.4 -> libB.so.2.4.5

符号链接文件也存在。知道为什么找不到这个库吗?

Java 能够加载库 A (libA.so) 的本机代码,当它 运行 时,本机代码依赖于 libB.so(但是,此时它在本机代码中 - 在 JVM 控制之外)。那时,您必须使用系统上的本机库。通常的机制是设置 LD_LIBRARY_PATH 环境变量 使用 ldconfig (根据手册页)部分

ldconfig creates the necessary links and cache to the most recent shared libraries found in the directories specified on the command line, in the file /etc/ld.so.conf, and in the trusted directories (/lib and /usr/lib). The cache is used by the run-time linker, ld.so or ld-linux.so.

如果您使用的是 WebLogic:请确保在覆盖 LD_LIBRARY_PATH 变量的 weblogic wlstart-脚本中有一个名为 USTART_LD_LIB 的系统变量。因此,您需要设置此变量并将 lib 附加到此变量并同时设置 LD_LIBRARY_PATH.

原因是您无法在手动启动您的应用程序之前继续导出变量..