C/C++程序編譯鏈接過程詳解

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!】

生成的中間文件如下所示:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章