連線(linking)是將各種**和資料片段收集並組合稱為乙個單一檔案的過程,
這個檔案可被載入(複製)到記憶體並執行。
在早期的計算機系統中,連線時手動執行的。在現代系統中,連線是由
叫做聯結器(linker)的程式自動執行的。
main.c
sum.c
大多數編譯系統提供編譯器驅動程式(compiler driver),它代表使用者在
需要時呼叫語言預處理器、編譯器、彙編器和聯結器。
linux> gcc -0g -o prog main.c sum.c
驅動程式首先執行c預處理器(cpp),它將c的源程式main.c翻譯成乙個
ascii碼的中間檔案main.i;
cpp [other arguments] main.c /tmp/main.i
接下來,驅動程式執行c編譯器(cc1),它將mian.i翻譯成乙個ascii彙編
語言檔案main.s;
cc1 /tmp/main.i -0g [other arguments] -o /tmp/main.s
然後,驅動程式執行彙編器(as),它將mian.s翻譯成乙個可重定位目標
檔案(relo-catable object file) main.o;
as [other arguments] -o /tmp/man.o /tmp/main.s
驅動程式經過相同的過程生成sum.o。最後,它執行聯結器程式ld,將main.o
和sum.o以及一些必要的系統目標檔案組合起來,建立乙個可執行目標檔案
(executeable object file)prog;
ld -o prog [system object files and args] /tmp/main.o /tmp/sum.o
要執行可執行檔案prog,我們在linux shell 的命令上輸入它的名字:
linux> ./prog
shell呼叫作業系統中乙個叫做載入器(loader)的函式,它將可執行檔案
prog中的**和資料複製到記憶體,然後將控制轉移到這個程式的開頭。
編譯過程和編譯程式筆記
圖 1.3 編譯的各個階段 詞法分析 從左到右乙個乙個字元地讀入源程式,對構成源程式的字元進行掃瞄和分解,從而識別出乙個個單詞。語法分析 在詞法分析的基礎上將單詞序列分解成各類語法短語,這些語法短語也稱為語法單位,可以表示成語法樹。語法分析依據的是語言的語法規則,即描述程式結構的規則 例如 id1 ...
編譯連線的整個過程和詳細的每個過程
編譯分為幾個階段組成 1.預處理器處理 預編譯 在這個階段,預處理器在源 上執行一些文字操作。如 define include 和清除注釋的操作 包括 1 去注釋 2 巨集替換 3 標頭檔案展開 4 條件編譯 2.編譯 c語言 彙編 3.彙編 彙編 二進位制 4.鏈結 源 經過解析,判斷它的語句的意...
程式的編譯和鏈結過程
c語言的編譯鏈結過程要把我們編寫的乙個c程式 源 轉換成可以在硬體上執行的程式 可執行 需要進行編譯和鏈結。編譯就是把文字形式源 翻譯為機器語言形式的目標檔案的過程。鏈結是把目標檔案 作業系統的啟動 和用到的庫檔案進行組織形成最終生成可載入 可執行 的過程。將乙個.c檔案編譯鏈結成.exe檔案,需要...