程式編譯流程

2021-08-19 19:50:04 字數 723 閱讀 4038

c/c++程式的基本編譯流程:

test.c --預處理--test.i--編譯--test.s--彙編--test.o--鏈結--test.exe

關於程式編譯的一些規範和方法,首先把原始檔編譯程中間**檔案,windows平台下是.obj檔案,unix下是.o檔案即object file,這一動作叫做編譯(compile);然後把編譯得到的中間**檔案合成為可執行檔案,這個動作叫做鏈結(link)。

編譯時:編譯器需要確定**語法的正確,函式與變數宣告的正確性。一般需要我們告訴編譯器標頭檔案的所在位置(標頭檔案中宣告,c/c++檔案中定義),如果語法正確,編譯器就可以編譯出中間目標檔案。一般情況下,每個原始檔對應於乙個中間目標檔案。

鏈結時:鏈結函式和全域性變數,可以使用中間目標檔案來鏈結我們的應用程式。鏈結器只關心中間目標檔案(object file),如果原始檔很多,編譯產生的中間目標檔案過多,而鏈結時需要指出中間目標檔名,這對於編譯不方便,故需要給中間目標檔案打包,windows下這種包稱為「庫檔案」(library file),即.lib檔案,unix下為archive file,也就是.a檔案。

總結:原始檔首先編譯為中間目標檔案,鏈結中間目標檔案生成可執行檔案。編譯時,編譯器只檢測語法,函式和變數是否被宣告。如果函式未被宣告,編譯器會給出警告,但可以生成object file。在鏈結程式時,聯結器會在中間目標檔案中找函式的實現,如果沒找到,那就報鏈結錯誤(linker error)。

之後會介紹一下makefile

程式編譯流程

程式編譯的過程中就是將使用者的文字形式的源 c c 轉化成計算機可以直接執行的機器 的過程。主要經過四個個過程 預編譯程式所完成的基本上是對源程式的 替代 工作。經過此種替代,生成乙個沒有巨集定義 沒有條件編譯指令 沒有特殊符號的輸出檔案 i 預處理中替代的內容為 巨集定義 include檔案包含 ...

程式的編譯流程

程式的基本流程如圖 1.預處理 預處理相當於根據預處理指令組裝新的c c 程式。經過預處理,會產生乙個沒有巨集定義,沒有條件編譯指令,沒有特殊符號的輸出檔案,這個檔案的含義同原本的檔案無異,只是內容上有所不同。將所有的 define 刪除,並且展開所有的巨集定義 處理所有的條件編譯指令,如 if i...

c 程式編譯流程

預處理相當於根據預處理指令組裝新的c c 程式。經過預處理,會產生乙個沒有巨集定義,沒有條件編譯指令,沒有特殊符號的輸出檔案,這個檔案的含義同原本的檔案無異,只是內容上有所不同。注意 這個過程可能是遞迴進行的,也就是說被包含的檔案可能還包含其他檔案 以便於編譯時編譯器產生除錯用的行號資訊及用於編譯時...