1、簡介
C/C++程序從編譯到運行總共有四個步驟:
1、預處理:條件編譯,頭文件包含,宏替換的處理,生成.i文件。
2、編譯:將預處理後的文件轉換成彙編語言,生成.s文件
3、彙編:彙編變爲目標代碼(機器代碼)生成.o的文件
4、鏈接:連接目標代碼,生成可執行程序
2、使用g++來完成每一個步驟
使用HelloWorld來驗證這四個過程,編寫一個hello.cpp
的文件,代碼如下:
#include <iostream>
using namespace std;
int main() {
cout << "hello world!"<< endl;
reutrn 0;
}
1、預處理
g++ -E hello.cpp > hello.i
運行完該命令,在文件夾下多出了一個hello.i
的文件。
在該過程主要有宏的替換,如#define m 5
,那麼在該階段會將程序中的m全部替換成5
以及條件編譯命令 #ifdef,#ifndef,#else,#elif,#endif
等,將不需要的 code 屏蔽掉,處理完畢後生成修改後的源代碼 test.i
。
2、編譯
g++ -S hello.cpp
運行完該命令,在文件夾下多出了一個hello.s
的文件。
該過程主要是將hello.i
文件利用編譯器編譯生成彙編文件,用編輯器打開就都是彙編指令。
3、彙編
g++ -c hello.cpp
運行完該命令,在文件夾下多出了一個hello.o
的目標文件。
該過程主要是將彙編源文件翻譯成對應的機器指令,即由0和1組成的機器指令。
4、鏈接
g++ -o hello hello.cpp
運行完該命令,在文件夾下多出了一個hello
的可執行文件。
程序運行:./hello
【輸出hello world!】
生成的中間文件如下所示: