g++/gcc編譯流程
阿新 • • 發佈:2019-01-22
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
功能:.o
是GCC
生成的目標檔案,除非你是做編譯器和聯結器除錯開發的,否則開啟這種.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