无法打开共享对象文件 - 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
.
原因是您无法在手动启动您的应用程序之前继续导出变量..
我正在尝试在我的 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
.
原因是您无法在手动启动您的应用程序之前继续导出变量..