Answers:
libc.so
在Ubuntu 11.04中作为多体系结构工作的一部分被移动了。之所以没有符号链接的原因是,multiarch的目的是使得可以同时安装i386
和amd64
版本,libc
以便可以在64位系统和32位系统上更轻松地运行32位二进制文件。反之亦然(以及其他类似情况)。如果libc6
软件包中包含指向新位置的符号链接,则针对不同体系结构的该软件包的版本将无法同时安装(选择哪个版本的符号链接dpkg
?),从而使整个练习失去了意义。
libc.so
从Ubuntu 11.04开始,必须对路径进行硬编码的所有内容都必须进行更新才能正常工作。如果您要讨论的脚本是Ubuntu的一部分,请报告有关该脚本的错误并添加multiarch
标签。
/lib/libc.so.6
对于32位还是64位库,不会有任何混淆。
动态库由内核加载,路径未在程序中进行硬编码。一个程序只说“我需要libc.so.6”。如在定义中库路径然后,该系统搜索/etc/ld.so.conf
,包括/usr/lib
和/lib
默认情况下。该文件在中包含其他配置文件/etc/ld.so.conf.d
。
在我的64位系统上,由于中定义的路径,libc.so.6
可以找到:/lib/x86_64-linux-gnu/libc.so.6
/etc/ld.so.conf.d/x86_64-linux-gnu.conf
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
要找出程序加载了什么库,请使用,ldd
如ldd /bin/bash
:
linux-vdso.so.1 => (0x00007ffff1dff000)
libncurses.so.5 => /lib/libncurses.so.5 (0x00007f9d8b3b8000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9d8b1b4000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9d8ae1f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9d8b61c000)
放置符号链接不会破坏任何内容。
要获取搜索到的目录列表,请运行:
ldconfig -v -N | grep '^/'
-v
导致显示文件+目录列表,-N
防止/etc/ld.so.cache
重新创建缓存()。
/usr/local/lib
我会遇到一些程序无法在其中找到安装库的问题,但是如果我从其中建立符号链接,它们也可以正常工作/usr/lib
。是什么原因导致这种现象?
ldconfig -v -N | grep '^/'
吗?