1、關於連接函數
1.連接:將各類代碼和數據部分收集起來並組合成爲一個單一文件的過程。
這個文件可被加載或拷貝到存儲器並執行。spa
2.連接能夠執行於編譯時,也就是在源代碼被翻譯成機器代碼。
也能夠執行於加載時,也就是程序被加載器加載到存儲器並執行時
執行於運行時,有應用程序來執行。操作系統
3.連接是由連接器的程序自動執行的。
命令行
4.連接使分離編譯成爲可能。
1.大部分編譯系統提供編譯驅動程序:表明用戶在須要時調用語言預處理器、編譯器、彙編器和連接器。
翻譯
(1)C預處理器:源程序main.c->ASCII碼中間文件main.i
(2)C編譯器:main.i->ASCII碼彙編語言文件main.s
(3)C彙編器:main.s->可重定位目標文件
2.運行連接器程序ld,將各類.o文件以及必要的系統目標文件組合起來,建立可執行文件
3.運行可執行文件:./可執行文件名字
4.外殼調用操做系統中加載器函數,拷貝可執行文件中的代碼和數據到存儲器,將控制轉移到這個程序的開頭
3、靜態連接code
1.以一組可重定位目標文件和命令行參數做爲輸入,生成一個徹底連接的能夠加載和運行的可執行目標文件做爲輸出。
編譯器
2.輸入的可重定位的目標文件由各類不一樣的代碼和數據節組成。
編譯
3.指令在一個節中,初始化的全局變量在另外一個節中,而未初始化的變量又在另一個節中。
符號解析 class
目標文件定義和引用符號。符號解析的目的是將每一個符號引用恰好和一個符號定義聯繫起來。變量
重定位
編譯器和彙編器生成從地址0開始的餓代碼和數據節。連接器經過把每一個符號定義與一個存儲器位置聯繫起來,而後修改全部對這些符號的引用,使得它們指向這個存儲器位置,從而重定位這些節