该程序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 运行正常。