Symlink

連結二進製文件和符號連結之間有什麼關係嗎?

  • December 15, 2018

二進製文件的連結(如動態或靜態連結)和符號連結之間是否有任何關係。它們是否以任何方式相互作用,或共享一些歷史,或者這兩個完全正交的概念恰好被稱為相似?

一點也不。一種涉及將對文件名(任何類型的文件)的所有引用重定向到不同的文件(符號連結),另一種涉及通過將程式碼從庫複製到執行檔(靜態連結)或引用動態庫來建構可執行映像。包含所需的程式碼並在執行時載入該動態庫。

是的,在“使用(文本)鍵查找命名資源”的抽象意義上,它們共享“連結”一詞的常識。從查看“正常”類型的文件連結(硬連結)開始會很有幫助。

硬連結是 Unix 目錄中的一個條目,它通過指向其inode將名稱與磁碟上的特定文件相關聯。當文件被訪問(opened, stated)時,文件系統驅動程序查找對應於請求名稱的 inode。目錄是一個將名稱與 inode 編號連接起來的表;在這個清單中,前面的數字是文件實際儲存的 inode:

6951168 -rwxr-xr-x 1 christopher christopher 209 Apr 24  2014 CAPS
6951172 -rwxr-xr-x 1 christopher christopher 976 Aug  6  2012 offline
6951175 -rwxr-xr-x 1 christopher christopher 541 Apr  8  2014 records-backup.sh
6950166 -rwxr-xr-x 1 christopher christopher 778 Nov  4 07:05 switch-monitors.sh

符號連結是一種功能,它不是直接指向 inode,而是指向一個特殊的小文本文件,該文件內部有一個相對路徑。在大多數情況下,它看起來就像一個正常的硬連結,它的名字是通過類比來命名的。

某種意義上的連結ld.so執行類似於文件系統使用硬連結的操作。C(和兼容的)程序使用一個符號表,其中列出了程序想要從其他庫呼叫的函式的名稱。連結器查找與每個請求名稱對應的函式的記憶體位置並將其填充(具體方式各不相同)。

引用自:https://unix.stackexchange.com/questions/176211