gcc 编译过程
gcc編譯
分步處理
- 一、預(yù)處理
- 二、編譯
- 三、匯編
- 四、鏈接
- 一步到位
- 多模塊編譯
C源文件到可執(zhí)行文件共經(jīng)歷了4個(gè)過(guò)程。在使用GCC編譯程序時(shí),編譯過(guò)程可以被細(xì)分為四個(gè)階段,包括預(yù)處理、編譯、匯編、鏈接。
分步處理
一、預(yù)處理
在預(yù)處理階段,編譯器主要作加載頭文件、宏替換、條件編譯的作用。一般處理帶“#”的語(yǔ)句。
我們可以通過(guò)gcc -E 選項(xiàng)進(jìn)行查看,如下所示:
gcc -E main.c > main.i編譯器將main.c預(yù)處理結(jié)果輸出 main.i 文件。
二、編譯
在編譯過(guò)程中,編譯器主要作語(yǔ)法檢查和詞法分析。在確認(rèn)所有指令都符合語(yǔ)法規(guī)則之后,將其翻譯成等價(jià)的中間代碼或者是匯編代碼。
編譯器將預(yù)處理結(jié)果文件main.i翻譯成匯編代碼main.s
三、匯編
匯編階段是把編譯階段生成的”.s”文件轉(zhuǎn)成二進(jìn)制目標(biāo)代碼。
編譯器將main.s文件轉(zhuǎn)化為main.o 文件。
四、鏈接
在成功編譯之后,就進(jìn)入了鏈接階段。鏈接就是將目標(biāo)文件、啟動(dòng)代碼、庫(kù)文件鏈接成可執(zhí)行文件的過(guò)程,這個(gè)文件可被加載或拷貝到存儲(chǔ)器執(zhí)行。
編譯器將main.o鏈接成最終可執(zhí)行文件main.exe
一步到位
執(zhí)行以下代碼:
多模塊編譯
一次性編譯:
獨(dú)立編譯:
gcc –Wall –c main_fun.c –o main_fun.o gcc –Wall –c –o main.o main.c gcc –Wall main_fun.o fun.o –o main多模塊編譯中如果某一個(gè)模塊發(fā)生了變化,只需要編譯更改的模塊即可
原文鏈接
總結(jié)
- 上一篇: yolov3 使用
- 下一篇: printf,fprintf(stdou