加载共享库时出错;无法打开共享对象文件:没有此文件或目录

加载共享库时出错;无法打开共享对象文件:没有此文件或目录

该程序evince抱怨说找不到 libfreetype.so.6;但是我显然有这个文件,并且它包含在我的 LD_LIBRARY_PATH 中;此外,我还有另一个使用 libfreetype6 的程序,并且能够正常运行。这是怎么回事?

jbud@jb-pc ~> evince
evince: error while loading shared libraries: libfreetype.so.6: cannot open shared object file: No such file or directory

jbud@jb-pc ~> ldd /usr/bin/evince | grep freetype
libfreetype.so.6 => /usr/local/lib/libfreetype.so.6 (0x00007f912179d000)

jbud@jb-pc ~> file /usr/local/lib/libfreetype.so.6
/usr/local/lib/libfreetype.so.6: symbolic link to `libfreetype.so.6.11.1'

jbud@jb-pc ~> file /usr/local/lib/libfreetype.so.6.11.1
/usr/local/lib/libfreetype.so.6.11.1: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=0x21a4b8005e0c9a42af001b35fb984f4e25efc71c, not stripped

jbud@jb-pc ~> echo $LD_LIBRARY_PATH
/usr/lib/:/usr/lib64/:/usr/lib/x86_64-linux-gnu/:/usr/local/lib/

jbud@jb-pc ~> ldd jdrive/jstuff/work/personal/noengine/client | grep freetype
libfreetype.so.6 => /usr/local/lib/libfreetype.so.6 (0x00007feb5ac89000)

答案1

创建符号链接/usr/lib/libfreetype.so.6应该不是如果错误是由 64 位 Linux 发行版上的 32 位应用程序引发的,则应用此方法。库可能会“损坏”。

在 64 位系统上,您需要为 32 位应用程序安装必要的 32 位依赖项,以便它能够检测和使用已经存在的libfreetype.so.6。每个应用程序的情况不同,但通常缺少以下这些:

sudo apt-get install libgtk2.0-0:i386 libidn11:i386 libglu1-mesa:i386

这些也可能解决问题:

sudo apt-get install libpangox-1.0-0:i386 libpangoxft-1.0-0:i386

问候,Albert Kok

答案2

我能够解决这个问题,但是我仍然不完全确定为什么这个问题会出现。

运行 strace 之后,我发现open("/usr/local/lib/libfreetype.so.6", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)这没有什么意义,因为依赖于 libfreetype 的其他程序(没有 sudo 权限)能够运行,并且所有程序的权限都设置为读/写,在 sudo 下运行 evince 也无济于事。

我的 libfreetype apt-get 将库放在 /usr/lib/x86_64-linux-gnu/libfreetype.so.6 中,但出于某种原因,evince 没有检查该文件夹(即使它已添加到 LD_LIBRARY_PATH)。但是我创建了一个指向文件夹的符号链接,它确实会检查该文件夹sudo ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so.6.10.1 /usr/lib/libfreetype.so.6,现在 evince 运行正常。

相关内容