使用strace,我发现了ldconfig (glibc)的行为,我无法理解
lstat("/usr/lib/libext2fs.so.2", {st_mode=S_IFLNK|0777, st_size=16, ...}) = 0
unlink("/usr/lib/libext2fs.so.2") = 0
symlink("libselinux.so.1", "/usr/lib/libext2fs.so.2") = 0是否需要ext2fs (libext2fs.so.2)的共享对象库作为到libselinux.so.1的符号链接。
ldconfig如何知道该做什么?在我看来,这种静态二进制/usr/bin/ldconfig会有这样的行为是不符合逻辑的,对吧。然而,它的配置文件/etc/ld.so.conf并不能帮我解开这个谜团。
是什么让我的发行版工具(Arch )更加令人困惑/怀疑,我找不到该文件所属的任何包。
$ pkgfile /usr/lib/libselinux.so.1不显示任何包,而$ pkgfile /usr/lib/libext2fs.so
输出core/e2fsprogs
所以我的问题是:
e2fsck)发布于 2019-06-05 21:40:48
您的库可能在某个时候被错误地从/usr/lib/libselinux.1重命名为/usr/lib/libext2fs.so.2。这并不妨碍ldconfig从库的内容(而不是库的文件名)中找到预期的名称,从而链接“正确”名称。可以通过将任何库复制到某个目录并要求ldconfig更新(仅)此目录来验证这一点。
这里是Debian 9上的等价物:
$ mkdir /tmp/foo
$ cp -aL /lib/x86_64-linux-gnu/libselinux.so.1 /tmp/foo/libmytest.so.2
$ ls -l /tmp/foo/*
-rw-r--r-- 1 test test 155400 Sep 24 2017 /tmp/foo/libmytest.so.2
$ /sbin/ldconfig -v -n /tmp/foo
/tmp/foo:
libselinux.so.1 -> libmytest.so.2 (changed)
$ ls -l /tmp/foo/*
-rw-r--r-- 1 test test 155400 Sep 24 2017 /tmp/foo/libmytest.so.2
lrwxrwxrwx 1 test test 14 Jun 5 23:33 /tmp/foo/libselinux.so.1 -> libmytest.so.2顺便说一句,libselinux是处理SELinux软件的通用库。即使是ls、cp、mv、ps命令也通常与之链接(用于各自的-Z选项)。
https://unix.stackexchange.com/questions/523089
复制相似问题