簡介:
GCC是由GNU出的C語言編譯器 (Compiler),可將由ANSI C或Traditional C語言寫成的程式碼編譯成可執行檔 (Executable File)。由於GCC能分別編譯出可執行於許多不同硬體、作業系統下的程式,在UNIX like system上是相當多人常用的C語言編譯程式。
使用方法簡介:
基本的使用方法及常用指令:
前言:
編譯器在編譯過程中,先將程式碼編譯成object檔,然後再和程式庫聯結,成為可執行檔。故一個編譯器須提供的參數主要有幾類:
1. 指定編譯器編出的object檔或是可執行檔檔名。
2. 在編譯過程做最佳化,可提升程式的執行速度。
3. 設定搜尋程式庫的標頭檔 (Header File)及程式庫檔的目錄及指定程式庫檔檔名。
4. 提供進一步的資訊以便使用者找尋程式中的錯誤。
以下便以這四個大類分別介紹。
注意:下面在不同類別中所介紹的參數,幾乎都可以混合著使用。
1. 設定編譯出的object檔檔名或是可執行檔檔名:
參數:-o (被輸出的檔名)
說明:指定編譯出的檔名。
範例:本例將程式碼Main.c編譯成可執行檔,並設定檔名為Main。
gcc Main.c -o Main
2. 在編譯過程做最佳化
參數:-O
說明:在編譯過程做最佳化,以提升增快程式執行速度。
範例:本例將程式碼Main.c編譯成可執行檔Main,並在編譯過程做最佳化。
gcc -O Main.c -o Main
3. 設定搜尋標頭檔目錄 (Include File)、程式庫檔 (Library File)的目錄及指定程式庫檔。
設定搜尋標頭檔目錄
參數:-I(Include_File_Name)
說明:將目錄Include_File_Name設定為搜尋標頭檔目錄之一。
設定搜尋程式庫目錄。
參數:-L(Library_File_Name)
說明:將目錄Library_File_Name設定為搜尋程式庫目錄之一。
設定程式庫檔案。
參數:-llibdps.a
說明:聯結程式庫libdps.a。
EX1:本例中假設你的程式檔名為Main.c,所要聯結的程式庫為libdps.a;在編譯的過程中讓它做最佳化。
gcc -O -I/usr/X11R6/incclude/ -L/usr/X11R6/lib/ -l/usr/X11R6/lib/libdps.a ./Main.c -o ./Main
EX2:本例中假設你的程式檔名為Main2.c,使用到X window函數,所需的include 檔放在/usr/X11R6/include/中,所須聯結的程式庫放在/usr/X11R6/lib,所要聯結的程式庫為libX11.a。同樣地在編譯的過程中做最佳化。
gcc -O -I/usr/X11R6/include/ -L/usr/X11R6/lib/ -l/usr/X11R6/lib/libX11.a ./Main2.c -o ./Main2
4. 提供進一步的資訊以便使用者找尋程式中的錯誤。
參數:-Wall
說明:Wall -- Warning all輸出較多的警告訊息,以便找出程式的錯誤。
範例:編譯Main.c時輸出較多的警告訊息。
gcc -Wall ./Main.c -o ./Main
參數:-g
說明:在編譯出可執行檔時,附加執行時除錯 (debug)資訊,以供gdb讀取(若要使用ABSoft的除錯程式,則須將參數改為-gdwarf )。
範例:將Main.c編譯成可執行檔Main,並附加除錯資訊。
gcc -g ./Main.c -o ./Main
進階參數
1. 僅編譯成object檔。
參數:-c
說明:僅編譯成object檔而不進行程式庫聯結。
範例:將Main.c編譯成object檔Main.o。
gcc -c ./Main.c -o ./Main.o
2. 聯結數個object成可執行檔。
範例:將FunC1.o、FunC2.o和程式庫聯結後成為可執行檔Main。
gcc FunC1.o FunC2.o -o ./Main
3. 觀察巨集展開情形:
參數:-E
說明:展開程式中的巨集以便了解巨集是否依照預期方式展開。
範例:將Main.c中的巨集展開後儲存到LOG.TXT。
gcc -E ./Main.c 1> ./LOG.TXT
4. 產生組合語言程式碼:
參數:-S
範例:編譯Main.c產生對應的組合語言程式碼檔Main.s。
gcc -S ./Main.c -o ./Main.s
如果需要更多的說明:
man gcc
info gcc
假如在Linux下看英文版的gcc Manual覺得很困難的話,在這裡推薦一本書:
書名:GCC完全指南
作者:Kurt Wall, William von Hagen
譯者:鄧瑋敦
出版社:博碩文化
ISBN:957-527-808-9
沒有留言:
張貼留言