程序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)
Run Code Online (Sandbox Code Playgroud)
bit*_*000 10
创建符号链接到/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
Run Code Online (Sandbox Code Playgroud)
这些也可能解决问题:
sudo apt-get install libpangox-1.0-0:i386 libpangoxft-1.0-0:i386
Run Code Online (Sandbox Code Playgroud)
问候, Albert Kok
我能够解决这个问题,但我仍然不完全确定为什么这是一个问题。
运行 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,现在证据运行良好。
| 归档时间: |
|
| 查看次数: |
84271 次 |
| 最近记录: |