繁体   English   中英

无法打开共享库文件-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能够为库AlibA.so )加载本机代码,并且在运行该本机代码时,它依赖libB.so (但是,此时它在本机代码中-在JVMs控件之外)。 此时,您必须使用系统上的本机库。 通常的机制是设置LD_LIBRARY_PATH环境变量使用ldconfig (根据手册页),其中部分内容是

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM