ld.so 是可执行文件吗?

ld.so 是可执行文件吗?
$ 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 节中提到?

谢谢。

答案1

两者都是,这是完全有效的

-风格的命名方案ld.so很大程度上是历史性的;这种风格的第一个动态链接器是 SunOS 4,它被命名为ld.so(我在某处有它的历史,一旦找到它,我会澄清这一点)。但将其命名为共享库而不是可执行文件是有充分理由的,包括:

  • 它的存在是为了提供可执行文件,例如共享库(如果没有可执行文件运行,它就没有任何用途);
  • 它是一个共享的 ELF 对象,但它不需要解释器(它没有.interp条目);这是库的典型特征(共享的,或者动态链接的,可执行文件总是需要解释器;否则它们是静态链接的)。

在 ELF 中,可执行文件和库之间的区别有些模糊;任何具有入口点和/或解释器的 ELF 对象都可以是可执行文件,无论其其他属性如何。

相关内容