gcc支持編譯的文件後綴及解釋
後綴 | 文件類型 |
---|---|
.c | C 源程序;預處理,編譯,彙編 |
.C | C++源程序;預處理,編譯,彙編 |
.cc | C++源程序;預處理,編譯,彙編 |
.cxx | C++源程序;預處理,編譯,彙編 |
.m | Objective-C 源程序;預處理,編譯,彙編 |
.i | 預處理後的 C 文件;編譯,彙編 |
.ii | 預處理後的 C++文件;編譯,彙編 |
.s | 彙編語言源程序;彙編 |
.S | 彙編語言源程序;預處理,彙編 |
.h | 預處理器文件;通常不出現在命令行上其他後綴名的文件被傳遞給連接器(linker).通常包括: |
.o | 目標文件(Object file) |
.a | 歸檔庫文件(Archive file) |
gcc的基本用法
gcc [options] [filenames]
gcc編譯流程
預處理 Pre-Processing
gcc -E hello.c -o hello.i
編譯 Compiling
gcc -S hello.c -o hello.s
彙編 Assembling
gcc -c hello.c -o hello.o
鏈接 Linking
gcc hello.c -o hello.i
gcc編譯選項分析
-
總體選項
-
-I dir 選項
在頭文件搜索列表中添加dir目錄。
Linux中默認的頭文件都放在/usr/include目錄下,當用戶希望添加放置在其他位置的頭文件時,就可以通過該選項來指定。
另外,在include語句中,< > 表示在標準路徑中搜索頭文件,“ ” 表示在本目錄中搜索。 -
-L dir 選項
可以參考-I dir選項 -
告警
-w 關閉所有告警
-Wall允許發出gcc提供的所有有用的報警信息 -
優化
-O -O2 -O3
可以使用time觀察優化前後程序運行時間
time ./a.out -
-llib
-lm 表示鏈接 libm.a庫 -
-static
-so爲動態鏈接庫 .a 爲靜態鏈接庫
當使用靜態庫時,鏈接器找出程序需要的函數,然後將他們拷貝到可執行文件,一旦鏈接成功,靜態庫就不需要了。動態庫會在可執行程序內部留下一個標記,指明當程序執行時,必須先載入該庫,linux下進行鏈接的缺省操作是鏈接動態庫。 -
-DMICRO
等價於#define MICRO