Load
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 節中提到?
謝謝。
兩者都是,這是完全有效的。
-
ld.so
風格的命名方案很大程度上是歷史性的;這種風格的第一個動態連結器是 SunOS 4,它被命名為ld.so
(我在某處有它的歷史,一旦我找到它,我會澄清這一點)。但是有正當理由將其命名為共享庫而不是執行檔,包括:
- 它的存在是為了提供執行檔,如共享庫(沒有執行檔執行它沒有任何目的);
- 它是一個共享的 ELF 對象,但它不需要解釋器(它沒有
.interp
條目);這是典型的庫(共享,或者更確切地說是動態連結的執行檔總是需要解釋器;否則它們是靜態連結的)。執行檔和庫之間的區別在 ELF 中有些模糊。任何具有入口點和/或解釋器的 ELF 對像都可以是執行檔,而不管其其他屬性如何。