前言
如果你使用的是集成開發環境,那么你點擊編譯按鈕就可生成可執行文件,然后點擊運行即可運行。那么,你知道從源代碼到可執行文件經歷了哪些過程嗎。僅僅是編譯?
下面以windows環境下的test.c為例,test.c里的代碼為:
#include 《stdio.h》 int main(void) { printf(“This is a test program! ”); return 0; }
其經歷如下過程:

如圖,編譯生成可執行文件的過程實際包含四個過程:(1)預處理;(2)編譯;(3)匯編;(4)鏈接。
預處理(Preprpcessing)
使用預處理器把源文件test.c經過預處理生成test.i文件,預處理用于將所有的#include頭文件以及宏定義替換成其真正的內容。
預處理的命令為:
gcc -E test.c -o test.i
上述命令中-E是讓編譯器在預處理之后就退出,不進行后續編譯過程;-o是指定輸出文件名。
預處理之后得到的仍然是文本文件。test.i文件部分內容截圖如下:

編譯(Compilation)
使用編譯器將預處理文件test.i編譯成匯編文件test.s。
編譯的命令為:
gcc -S test.i -o test.s
上述命令中-S讓編譯器在編譯之后停止,不進行后續過程;-o是指定輸出文件名。匯編文件test.s是文本文件,部分內容截圖如下:

匯編(Assemble)
使用匯編器將匯編文件test.s轉換成目標文件test.o。
匯編過程的命令為:
gcc -c test.s -o test.o
上述命令中-c、-o讓匯編器把匯編文件test.s轉換成目標文件test.o。目標文件test.o是二進制文件,部分內容截圖如下:

鏈接(Linking)
鏈接過程使用鏈接器將該目標文件與其他目標文件、庫文件、啟動文件等鏈接起來生成可執行文件。
鏈接過程的命令為:
gcc test.o -o test.exe
綜上,生成可執行程序過程為:預處理、編譯、匯編、鏈接。各個命令如下圖所示:

責任編輯:pj
-
編譯器
+關注
關注
1文章
1672瀏覽量
51592 -
匯編器
+關注
關注
0文章
31瀏覽量
11620 -
Test
+關注
關注
0文章
80瀏覽量
27901
發布評論請先 登錄
性能突破 | SpacemiT-X60 在 LLVM 編譯器上實現 16% 顯著提升
開源鴻蒙技術大會2025丨編譯器與編程語言分論壇:語言驅動系統創新,編譯賦能生態繁榮
飛凌嵌入式ElfBoard-Vim編輯器之GCC的基本使用
飛凌嵌入式ElfBoard-Vim編輯器之GCC編譯器的安裝
GCC編譯器,怎么才能實現c文件中未被調用的函數,不會被編譯呢?
邊緣設備AI部署:編譯器如何實現輕量化與高性能?
編譯器功能安全驗證的關鍵要素
兆松科技ZCC編譯器全面支持芯來科技NA系列處理器
RISC-V架構下的編譯器自動向量化
使用編譯器將預處理文件的編譯的命令是什么?
評論