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

gli*_*yme 6 shared-library

程序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


gli*_*yme 0

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

运行 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,现在证据运行良好。