1. 程式人生 > >g++/gcc編譯流程

g++/gcc編譯流程

gcc & g++現在是gnu中最主要和最流行的c & c++編譯器 。
g++c++的命令,以.cpp為主,對於c語言字尾名一般為.c
這時候命令換做gcc即可。

本質上都是gnu編譯器集合中的倆個部分

其實編譯器是根據gcc還是g++來確定是按照C標準還是C++標準編譯連結。


下面以Test.cpp為例:
命令: `g++ Test.cpp`

功能:生成預設為a.exe的檔案,這個過程包含了編譯和連結。
再說下-o命令,-o命令表示輸出的意思,gcc/g++命令是非常靈活的,你不指定輸出的檔名的時候預設生成的是.exe檔案。


要輸出Test.exe
的話可以用:g++ -o Test.exe Test.cpp
-o命令是輸出的意思,這樣就輸出了Test.exe

gcc/g++在執行編譯工作的時候,總共需要以下幾步:

1.預處理,生成.i的檔案[前處理器cpp]

命令:g++ -E Test.cpp > Test.i

功能:輸出預處理後的檔案,linux下以.i為字尾名。

只啟用預處理,這個不生成檔案,你需要把它重定向到一個輸出檔案裡 。

這一步主要做了這些事情:巨集的替換,還有註釋的消除,還有找到相關的庫檔案。
用編輯器開啟Test.i會發現有很多很多程式碼,你只需要看最後部分就會發現,預處理做了巨集的替換,還有註釋的消除,可以理解為無關程式碼的清除。

2.將預處理後的檔案轉換成組合語言,生成檔案.s[編譯器egcs]

命令:g++ -S Test.cpp

功能:會生成Test.s檔案,.s檔案表示是彙編檔案,用編輯器開啟就都是彙編指令。

3.由彙編變為目的碼(機器程式碼)生成.o的檔案[彙編器as]

命令:g++ -c Test.cpp
功能:.oGCC生成的目標檔案,除非你是做編譯器和聯結器除錯開發的,否則開啟這種.o沒有任何意義。
二進位制機器碼

4.連線目的碼,生成可執行程式[連結器ld]

命令:g++ Test.o -L F:\vs2008\VC\include\iostream
功能:將.o檔案與所需的庫檔案連結整合形成.exe

.exec可執行檔案。
-L 表示連結,這裡我後面寫的是絕對路徑,相對各人電腦不同


在上面各個步驟中你可以用-o命令輸出你自己想要的各種名字。比如最後一個命令,用下面的輸出Test.exe
g++ Test.o -o Test -L F:\vs2008\VC\include\iostream