当前位置: 首页 > 知识库问答 >
问题:

部署程序后,JNI找不到共享库

潘佐
2023-03-14

在将一个导出的Java项目从开发机器转移到生产机器之后,我遇到了麻烦。

java项目(一个Eclipse插件)有一个我写的JNI库,它依赖于一个开源库,而开源库又依赖于Boost。我在我的SLES11机器上编译了所有东西,包括Boost,这个程序就可以工作了。

当我把程序移到另一台机器上时,我得到了一个错误:

java.lang.UnsatisfiedLinkError:/path/to/project/lib/libMyJNI.so: libboost_system.so.1.67.0: cannot open shared object file: No such file or directory

我在同一个目录中复制了所需的库<代码>ldd libMyJNI。因此列出了20个依赖项,但解决了所有依赖项。

我还是会犯同样的错误。

我假设java。图书馆路径设置正确,因为它试图加载libMyJNI。因此并识别依赖关系。

我期待如果ldd工作,java应该解决依赖关系吗?有线索吗?

非常感谢。

编辑:下面是lddldd libMyJNI的输出。所以

linux-vdso.so.1 =>  (0x00007fffa59ff000)
libboost_system.so.1.67.0 (0x00007fc427bce000)
libboost_filesystem.so.1.67.0 (0x00007fc4279b4000)
libboost_thread.so.1.67.0 (0x00007fc42778f000)
libboost_date_time.so.1.67.0 (0x00007fc42757a000)
libboost_iostreams.so.1.67.0 (0x00007fc42735f000)
libboost_serialization.so.1.67.0 (0x00007fc42710f000)
libboost_chrono.so.1.67.0 (0x00007fc426f06000)
libboost_atomic.so.1.67.0 (0x00007fc426d04000)
libboost_regex.so.1.67.0 (0x00007fc426a00000)
libpcl_common.so.1.8 (0x00007fc42673b000)
libpcl_io.so.1.8 (0x00007fc4263cb000)
libpcl_octree.so.1.8 (0x00007fc425fdc000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fc425c98000)
libm.so.6 => /lib64/libm.so.6 (0x00007fc425a42000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fc42582b000)
libc.so.6 => /lib64/libc.so.6 (0x00007fc4254cc000)
librt.so.1 => /lib64/librt.so.1 (0x00007fc4252c3000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc4250a6000)
libz.so.1 => /lib64/libz.so.1 (0x00007fc424e8f000)
libgomp.so.1 => /usr/lib64/libgomp.so.1 (0x00007fc424c86000)
libpcl_io_ply.so.1.8 (0x00007fc424a21000)
libpng12.so.0 => /usr/lib64/libpng12.so.0 (0x00007fc4247f9000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc427fe8000)

共有1个答案

濮阳俊明
2023-03-14

感谢@user2543253我已经解决了这个问题,我正在为以后的读者(包括我,当我也会有同样的问题)给出答案。

java。图书馆路径设置正确,因为它可以加载JNI库。其他库(依赖项)必须位于LD_LIBRARY_PATH中列出的目录中。因此,在部署软件时,您可以

  • LD_LIBRARY_PATH
  • 在启动插件之前,将目录附加到LD_LIBRARY_PATH

ldd可以成功链接库,因为它也在当前目录中查找。所以ldd libMyJNI。因此,可以在ldd\path\to\libMyJNI时成功。因此可能会失败。在这种情况下,JNI不起作用。

 类似资料:
  • 我有一个项目,我正试图从我的将其部署到。它在windows,但是当我在那里开发时,我在下面得到了这个错误。 从Azure Web应用程序登录: 我尝试过不同的解决方案,包括在我的文件,如下所示: 我怎样才能解决这个问题?

  • 我有一个项目,我正试图从我的将其部署到。它在windows,但是当我在那里开发时,我在下面得到了这个错误。 从Azure Web应用程序登录: 我尝试了不同的解决方案,包括将放入我的文件,如下所示: 我怎样才能解决这个问题?

  • 我遇到的问题,当部署laravel到共享托管css和js文件没有找到,我上传laravel文件到public_html和改变server.phpindex.php然后移动. htaccess这是在公共public_html文件夹。我使用这个方法来删除url中的公共文件夹。

  • 我已经从Glassfish v2.1迁移到Glasfiss3.1.2.2。我在Glassfish v2.1中部署并运行了几个Web应用程序(WAR),但我在Glassfish v3.1.2.2中部署其中一些时遇到问题。 当我尝试在Gfv3中部署一个WAR文件时,我总是会得到一个与在web.xml描述符中定义的库相关的ClassNotFoundException,例如: 或者 这些库包含在web-a

  • 我部署了一个laravel应用程序到共享主机(host inger)。除了没有显示的图像,一切都很好。 我已经创建了一个符号链接的存储文件夹与我的public_html文件夹。上传的文件进入公共文件夹,但当我链接图像时,它们仍然不显示。 由于无法访问公用文件夹,我已创建指向公用html的符号链接。我需要你的帮助 我需要图像显示在浏览器上

  • 我在/usr/local/lib中有libcommon.so,我在程序中链接了这个库。 gcc -o测试test _ Prog . c-L/usr/local/lib-llib common . so 我也试过这个 gcc -o test test_prog.c -L/usr/local/lib -llibcommon 是给予 /usr/bin/ld: 找不到 -llibcommon.so 收集