C 連結在實務上是如何運作的?
在 C 中,連結是組合多個目標檔案(.o 檔案)和函式庫(.a 或 .so 檔案)轉換為單一執行檔(.exe 或 .out)。連結器解析目標檔案和函式庫之間的外部引用,並建立符號表和可執行檔運作所需的其他資訊。
連結是如何發生的?
重定位實踐
為了說明重定位的過程,請考慮以下範例:
// a.cpp int a = 10; int main() { return a; }
// b.cpp int b = 20;
當我們編譯a.cpp和b.cpp時,我們得到兩個目標檔:a.o和b.o. a.o 檔包含變數 a的定義,而 b.o 檔案包含變數 b 的定義。
當我們將 a.o 和 b.o 連結在一起時,連結器需要確保 a 和 b 的引用在最終的可執行檔指向正確的位址。這是透過執行重定位來完成的。
在重定位期間,連結器會修改可執行檔中 a 和 b 的位址,以符合它們在記憶體中的最終位址。例如,如果 a 分配在位址 0x1000,b 分配在位址 0x2000,則連結器將修改可執行檔中對 a 的所有引用,使其指向 0x1000,將所有對 b 的引用修改為指向 0x2000。
此程序可確保執行檔在執行時可以正確存取變數 a 和 b。
以上是C 連結如何運作:從目標檔案到執行檔?的詳細內容。更多資訊請關注PHP中文網其他相關文章!