![ldconfig 不遵循用户创建的符号链接](https://linux22.com/image/37851/ldconfig%20%E4%B8%8D%E9%81%B5%E5%BE%AA%E7%94%A8%E6%88%B7%E5%88%9B%E5%BB%BA%E7%9A%84%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5.png)
我正在尝试运行 Inkscape 0.48.4-15 (armv7),它是通过 Arch Linux ARM 的 pacman 安装的。
$ inkscape
inkscape: error while loading shared libraries: libMagick++-6.Q16HDRI.so.3: cannot open shared object file: No such file or directory
正如预期的那样,共享对象在 /usr/lib 中不可用:
$ ll /usr/lib | grep libMagick+
lrwxrwxrwx 1 root root 30 Jun 5 03:04 libMagick++-6.Q16HDRI.so -> libMagick++-6.Q16HDRI.so.4.0.0
lrwxrwxrwx 1 root root 30 Jun 5 03:04 libMagick++-6.Q16HDRI.so.4 -> libMagick++-6.Q16HDRI.so.4.0.0
-rwxr-xr-x 1 root root 379428 Jun 5 03:06 libMagick++-6.Q16HDRI.so.4.0.0
因此,我创建了一个将 *.so.3 链接到 *.so.4.0.0 的符号链接:
$ sudo ln -s libMagick++-6.Q16HDRI.so.4.0.0 libMagick++-6.Q16HD.so.3
lrwxrwxrwx 1 root root 30 Jun 5 03:04 libMagick++-6.Q16HDRI.so -> libMagick++-6.Q16HDRI.so.4.0.0
lrwxrwxrwx 1 root root 30 Jun 6 15:15 libMagick++-6.Q16HDRI.so.3 -> libMagick++-6.Q16HDRI.so.4.0.0
lrwxrwxrwx 1 root root 30 Jun 5 03:04 libMagick++-6.Q16HDRI.so.4 -> libMagick++-6.Q16HDRI.so.4.0.0
-rwxr-xr-x 1 root root 379428 Jun 5 03:06 libMagick++-6.Q16HDRI.so.4.0.0
并验证 *.so.3 确实链接到 *.so.4.0.0。
$ readlink -f libMagick++-6.Q16HDRI.so.3
/usr/lib/libMagick++-6.Q16HDRI.so.4.0.0
现在,我重新配置动态链接器运行时绑定并重新运行 Inkscape:
$ sudo ldconfig
$ ldd $(which inkscape) | grep libMagick++
libMagick++-6.Q16HDRI.so.3 => /usr/lib/libMagick++-6.Q16HDRI.so.3 (0x75cf9000)
为什么*.so.3
链接到自身而不是遵循之前创建的符号链接?
答案1
Ldd 不遵循符号链接。它仅显示找到库的路径。 ldd - 诊断工具以及它是否遵循妨碍诊断的符号链接。