360fans_8OOsq4 发表于 2024-4-9 09:47

问题求助:Linux版中找不到动态链接库

**如果需要沟通请直接加我微信,我这边不方便接电话

如题,不知道怎么回事,我的电脑提示libeppgui.so: cannot open shared object file: No such file or directory
详细内容分析:hua@ThinkPad-T440:~$ ldd '/opt/apps/360epp/files/bin/eppforlinux'
linux-vdso.so.1 (0x00007fff49913000)
libeppgui.so => not found
libqutils.so => not found
libQt5Core.so.5 => /lib/x86_64-linux-gnu/libQt5Core.so.5 (0x0000708a58600000)
libconfigdelegate.so => not found
librcf.so => not found
libepptimer.so => not found
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x0000708a58cd4000)
libconstconfig.so => not found
libfilemagic.so => not found
libepputils.so => not found
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x0000708a58ccd000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x0000708a58200000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x0000708a58cad000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x0000708a57e00000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x0000708a58c8f000)
libdouble-conversion.so.3 => /lib/x86_64-linux-gnu/libdouble-conversion.so.3 (0x0000708a58c7a000)
libicui18n.so.70 => /lib/x86_64-linux-gnu/libicui18n.so.70 (0x0000708a57a00000)
libicuuc.so.70 => /lib/x86_64-linux-gnu/libicuuc.so.70 (0x0000708a57805000)
libpcre2-16.so.0 => /lib/x86_64-linux-gnu/libpcre2-16.so.0 (0x0000708a58bf0000)
libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x0000708a58531000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x0000708a580c6000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x0000708a5844a000)
/lib64/ld-linux-x86-64.so.2 (0x0000708a58cee000)
libicudata.so.70 => /lib/x86_64-linux-gnu/libicudata.so.70 (0x0000708a55a00000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x0000708a58b78000)
但我看了下,相关的so文件都在安装目录,请问我要如何做?谢谢各位帮助。

熊猫w 发表于 2024-4-9 21:17

根据您提供的信息,libeppgui.so 和其他几个 .so 文件在您的系统中找不到,但您提到这些文件实际上存在于安装目录中。这通常意味着动态链接器(ld)没有配置为在您的安装目录中查找这些库。

有几种方法可以解决这个问题:

设置 LD_LIBRARY_PATH 环境变量:
您可以设置 LD_LIBRARY_PATH 环境变量,以便包含您的安装目录。例如,如果 libeppgui.so 位于 /opt/apps/360epp/files/lib,您可以执行以下命令:

bash
export LD_LIBRARY_PATH=/opt/apps/360epp/files/lib:$LD_LIBRARY_PATH
然后再次尝试运行您的程序。请注意,这种方法是临时的,每次打开新的终端会话时都需要重新设置。为了使其永久生效,您可以将上述命令添加到您的 ~/.bashrc 或 ~/.profile 文件中。

创建符号链接:
如果您希望将这些库放在标准库目录中,以便系统可以自动找到它们,您可以在 /usr/lib 或 /usr/local/lib 中创建符号链接。但请注意,这可能会影响系统的其他部分,因此应谨慎使用。

使用 ldconfig:
如果您的安装目录符合标准布局(即,库文件位于 lib 或 lib64 子目录中),您可以使用 ldconfig 工具来更新缓存。首先,您需要在 /etc/ld.so.conf.d/ 中创建一个新的配置文件,例如 360epp.conf,并在其中添加您的库路径:

bash
echo "/opt/apps/360epp/files/lib" | sudo tee -a /etc/ld.so.conf.d/360epp.conf
然后运行 sudo ldconfig 来更新动态链接器缓存。

使用 rpath 或 runpath:
在编译时,您可以使用 -Wl,-rpath,/path/to/libs 选项来指定运行时库的搜索路径。这样,即使库不在标准的库路径中,程序也可以在运行时找到它们。

使用静态链接:
如果可能,您可以考虑静态链接这些库,这样您的程序就不会在运行时依赖动态库。但这会增加最终程序的大小,并且可能引入其他依赖问题。

在尝试上述任何方法之前,请确保您有适当的权限来修改系统配置或安装目录,并始终备份重要数据以防万一。如果您不熟悉这些操作,可能需要寻求系统管理员或具有更多Linux经验的用户的帮助。
页: [1]
查看完整版本: 问题求助:Linux版中找不到动态链接库