
雖然兩者都被稱為“連結器”並用於連結二進位文件,但我無法真正弄清楚它們之間有何不同。誰能告訴我他們的差別?
答案1
無需太技術性:兩者都是“連結器”,即將一段編譯程式碼與另一段編譯程式碼組合/載入到另一段編譯程式碼中的工具。
ld
是靜態連結器,ld.so
而是動態連結器。
我相信這些字母so
是「共享物件」的縮寫,您通常會將其視為共享庫的文件名後綴,即可以動態連結到程式中的庫(一個庫在多個程式之間「共享」) 。相反,靜態庫通常具有檔案名稱後綴.a
,表示「存檔」(由實用程式建立ar
)。
靜態連結器在編譯時連結程式或函式庫,通常作為編譯過程的最後一步,建立二進位執行檔或函式庫。對於二進位可執行文件,它可能是靜態二進位文件全部載入到二進位檔案本身的庫,或者它可能是動態連結的二進位文件,只有一些靜態連結的庫。
動態連結器在執行時將編譯時動態連結的函式庫載入到進程的位址空間。
ld
請參閱ld.so
您的系統的手冊。