C++的編譯過程通常可以分為四個階段:預處理、編譯、匯編和鏈接。下面是這四個階段的詳細說明:
-
預處理(Preprocessing):在這個階段,預處理器(cpp)會處理源代碼文件中的預處理指令,如
#include
,#define
等。預處理器會將#include
指令指向的文件內容插入到源文件中,處理#define
定義的宏,處理條件編譯指令等。預處理后的文件通常以.i
或.ii
為擴展名。 -
編譯(Compilation):編譯器(如g++)將預處理后的文件(
.i
或.ii
文件)轉換為匯編語言文件。這個過程中,編譯器會檢查代碼的語法錯誤,并進行詞法分析、語法分析、語義分析和優化等操作。編譯后的文件通常以.s
為擴展名。 -
匯編(Assembly):匯編器(如as)將匯編語言文件(
.s
文件)轉換為目標文件。這個過程中,匯編器會將匯編代碼轉換為機器語言代碼。匯編后的文件通常以.o
為擴展名,這些文件也被稱為目標文件。 -
鏈接(Linking):鏈接器(如ld)將一個或多個目標文件(
.o
文件)鏈接為一個可執行文件或者庫文件。這個過程中,鏈接器會解析目標文件之間的相互引用,將它們連接在一起。鏈接后的文件通常沒有特定的擴展名,或者以.out
、.exe
(在Windows中)為擴展名。