$ file /lib/ld-linux.so.2
/lib/ld-linux.so.2: symbolic link to i386-linux-gnu/ld-2.27.so
$ readlink -f /lib/ld-linux.so.2
/lib/i386-linux-gnu/ld-2.27.so
$ file /lib/i386-linux-gnu/ld-2.27.so
/lib/i386-linux-gnu/ld-2.27.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=7a59ed1836f27b66ffd391d656da6435055f02f8, stripped
ld-2.27.so
共享库也是如此吗?
据说它是一个动态链接器/加载器,并在 man 的第 8 节中提到。那么它是可执行文件吗?
如果是,为什么它被命名为共享库*.so
?
如果不是,我该如何理解它就像一个可执行文件,作为一个动态链接器/加载器,并在 man 的第 8 节中提到?
谢谢。
两者都是,这是完全有效的。
-
ld.so
风格的命名方案很大程度上是历史性的;这种风格的第一个动态链接器是 SunOS 4,它被命名为ld.so
(我在某处有它的历史,一旦我找到它,我会澄清这一点)。但是有正当理由将其命名为共享库而不是可执行文件,包括:.interp
条目);这是库的典型特征(共享或动态链接的可执行文件总是需要解释器;否则它们是静态链接的)。可执行文件和库之间的区别在 ELF 中有些模糊。任何具有入口点和/或解释器的 ELF 对象都可以是可执行文件,而不管其其他属性如何。