前言:編程
GCC 原名爲 GNU C 語言編譯器(GNU C Compiler),由於它本來只能處理 C語言。GCC 很快地擴展,變得可處理 C++。後來又
擴展可以支持更多編程語言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各種處理器架構上的彙編語言等,因此改
名GNU編譯器套件(GNU Compiler Collection)。(百度百科,想了解本身查詢)vim
一.GCC程序的編譯過程大概分四個階段架構
二.簡單HelloWorld程序的編譯過程編程語言
示例:HelloWorld.cspa
1 #include <stdio.h> 2 int main() 3 { 4 printf("Hello World!\n"); 5 return 0; 6 }
Ctrl+Alt+T --->打開控制檯--->輸入vim HelloWorld.c命令行
1. 執行以下命令:$ gcc -o HelloWorld HelloWorld.c3d
運行以下 : $ ./HelloWorld
輸出: HelloWorld!code
2. 分步編譯以下:
(1) $ gcc –E HelloWorld.c -o HelloWorld.iblog
能夠輸出HelloWorld.i文件中存放着HelloWorld.c經預處理以後的代碼。打開HelloWorld.i文件,看一看,就明白了。後面那條指令,是直接在命令行窗口中輸出預處理後的代碼.編譯器
gcc的-E選項,可讓編譯器在預處理後中止,並輸出預處理結果。在本例中,預處理結果就是將stdio.h 文件中的內容插入到HelloWorld.c中了。
//預處理結束
//這時候你看一下HelloWorld.i ,能夠看到插進去了不少東西。
(2) $ gcc –S HelloWorld.i
gcc的-S選項,表示在程序編譯期間,在生成彙編代碼後,中止,-o輸出彙編代碼文件。
查看下HelloWorld.s //生成彙編代碼後結束
(3)生成彙編代碼文件HelloWorld.s之後,須要gas彙編器負責將其編譯爲目標文件,以下:
$ gcc –c HelloWorld.c
或者:
$ gcc -c HelloWorld.c –o HelloWorld.o
或者:
$ gcc -c HelloWorld.i -o HelloWorld.o
//編譯結束
//生成 HelloWorld.o文件
(4) $ gcc HelloWorld.o –o HelloWorld 生成鏈接,可執行文件(HellWorld從新生成的可執行文件)
gcc鏈接器是gas提供的,負責將程序的目標文件與所需的全部附加的目標文件鏈接起來,最終生成可執行文件。
附加的目標文件包括靜態鏈接庫和動態鏈接庫。
對於上一小節中生成的HelloWorld.o,將其與C標準輸入輸出庫進行鏈接,最終生成程序HelloWorld可執行文件
輸入命令:gcc HelloWorld.o –o HelloWorld--->生成以下圖:
3. 多個程序文件的編譯
通常狀況一個程序都是有若干個文件源文件組成,因此編譯的時候須要造成多個編譯單元,使用GCC編譯器能夠將多個源文件編譯成所須要的程序
好比:源文件有main.c a.c b.c 最終生成一個可執行的文件main
好比:一個工程有main.c a.c b.c生成test的可執行文件。
編譯命令以下:
$ gcc –c main.c a.c b.c –o main
或者:
$ gcc –o main main.c a.c b.c
GCC仍然會按照預處理、編譯和連接的過程依次進行
大概過程至關於:
gcc -c main.c -o main.o
gcc -c a.c -o a.o
gcc -c b.c -o b.o
最後:
gcc main.o a.o b.o -o main