无法打开共享对象文件-C++;Java中的库 我试图在我的java代码中使用C++编译库。我将java.library.path设置为/usr/local/lib/,并且我拥有安装在那里的库的所有.so文件

无法打开共享对象文件-C++;Java中的库 我试图在我的java代码中使用C++编译库。我将java.library.path设置为/usr/local/lib/,并且我拥有安装在那里的库的所有.so文件,java,c++,java-native-interface,shared-libraries,Java,C++,Java Native Interface,Shared Libraries,但是,当我尝试运行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 ro

但是,当我尝试运行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控制之外)。此时,必须使用系统上的本机库。通常的机制是设置环境变量使用
ldconfig
(根据手册页),其中部分说明

ldconfig创建指向最新版本的必要链接和缓存 在命令中指定的目录中找到共享库 行,位于文件/etc/ld.so.conf和受信任目录(/lib)中 和/usr/lib)。缓存由运行时链接器ld.so或ld-linux.so使用


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

ldconfig创建指向最新版本的必要链接和缓存 在命令中指定的目录中找到共享库 行,位于文件/etc/ld.so.conf和受信任目录(/lib)中 和/usr/lib)。缓存由运行时链接器ld.so或ld-linux.so使用


如果您正在使用WebLogic:请确保在WebLogic的
wlstart
-脚本中有一个名为
USTART\u LD\u LIB
的系统变量,该脚本将覆盖
LD\u LIBRARY\u路径
变量。因此,您需要设置此变量,并将库附加到此变量,同时设置
LD\u LIBRARY\u PATH


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

如果您正在使用WebLogic:请确保在WebLogic的
wlstart
-脚本中有一个名为
USTART\u LD\u LIB
的系统变量,该脚本将覆盖
LD\u LIBRARY\u路径
变量。因此,您需要设置此变量,并将库附加到此变量,同时设置
LD\u LIBRARY\u PATH


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

你运行过sudo ldconfig吗?@ElliottFrisch刚刚试过。不值得检查文件权限。或者您可以使用strace来查看它试图做什么。您也可以作为一个测试系统。加载()确切的文件名,看看它是否/如何失败,可能再次出错。@ElliottFrisch Ok,所以我在
/etc/ld.so.conf
中添加了
/usr/local/lib
,然后重新运行,它似乎已经解决了问题。如果有人能解释这是如何解决问题的,我很乐意接受这样的回答:您是否运行了
sudo ldconfig
?@ElliottFrisch刚刚试过。不值得检查文件权限。或者您可以使用strace来查看它试图做什么。您也可以作为一个测试系统。加载()确切的文件名,看看它是否/如何失败,可能再次出错。@ElliottFrisch Ok,所以我在
/etc/ld.so.conf
中添加了
/usr/local/lib
,然后重新运行,它似乎已经解决了问题。如果有人能解释这是如何解决问题的,我愿意接受这个答案