程式的連線和編譯過程

2021-09-24 11:09:19 字數 1108 閱讀 1503

連線(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檔案,需要...