GCC簡介
在Unix系統環境下最廣為使用的C語言的編譯器即gcc(GNU C Compiler)。是一個由GNU社群推出編譯器,能編譯器C、C++語言的程式,gcc是可以在多種硬體平臺上編譯出可執行程式,功能優越而穩定。在此介紹gcc最常用的參數。
gcc [-c|-S|-E] [-Olevel] [-Wwarn...] [-o outfile] infile.
Infile: 是最重要也是唯一必備的參數,告訴gcc原始程式檔的檔名和路徑。
-o: (小寫) 指定輸出的執行檔檔名。
-O: (大寫) 編譯過程執行最佳化的動作,增加輸出執行檔的執行速度。gcc允許level 0 到 level 3的最佳化程度,level 0就是完全沒有。通常使用到level 2即可。
-W: (大寫) 編譯過程中顯示出warning訊息,’W’後面接描述詞,描述warning訊息的種類。建議使用”all”描述詞,顯示所有的warning訊息。
-I 設定搜尋標頭檔目錄。
-L 搜尋函式庫目錄
-lname: 聯結函式庫,函式庫檔案libname.a。
-g: 在編譯可執行檔時,附加執行時除錯資訊。(以供 gdb 讀取)
-E: 將Source code中的巨集展開,之後輸出到 stdout。
-c: 僅編譯成 object 檔而不進行程式庫聯結。
-S: 產生對應的組合語言程式碼檔 (*.s)。
副檔名規則
Gcc編譯器能將C、C++語言根源程式、匯程式化序和目的程式編譯、連接成可執行檔,如果沒有給出可執行檔的名字,gcc將生成一個名為 a.out的文件。在Linux系統中,可執行檔沒有統一的尾碼,系統從檔的屬性來區分可執行檔和不可執行檔。而gcc則通過尾碼來區別輸入檔的類別,下 面我們來介紹gcc所遵循的部分約定規則。
.c:C語言源始碼檔;
.a:是由目標檔構成的函式庫檔;
.cc:是C++源始碼檔;
.h:是程式所包含的標頭檔;
.i :是已經預處理過的C源始碼檔;
.ii:是已經預處理過的C++源始碼檔;
.m為尾碼的文件,是Objective-C源始碼文件;
.o:是編譯後的目標檔;
.s為尾碼的文件,是組合語言源始碼文件;
.S:是經過預編譯的組合語言源始碼檔。
常用範例
範例:將 test.c 編譯成可執行檔 test 並在編譯過程中做最佳化。
#gcc -O test.c -o test
範例: 將 test1.c 和 test2.c 編譯聯結成可執行檔 test 並在編譯過程中做最佳化。
#gcc -O test1.c test2.c -o test
範例:若程式中有使用數學函數如 sin 等,編譯時須加入 -lm 。
#gcc -O test.c -o test -lm
範例:發現程式有執行時錯誤,編譯後需用 GDB 除錯。
#gcc -O -g test.c -o test
#gcc -O -g test.c -o test
[註: 來源處為 http://140.92.88.48/tlog/linux/entry/gcc%E7%B0%A1%E4%BB%8B]
沒有留言:
張貼留言