Linux學習筆記五:gcc程式編譯 Linux下的gcc(GNU C Compiler)是由GNU推出的功能十分強大的平台編譯器,它可在多種硬體平台上編譯出可執行程式,對於gcc的學習與掌握非常必要,因為gcc將會伴隨我們整個的linux學習及開發過程。gcc可以降c,c++及組譯工具編譯連結成可執行檔檔案。需要注意的是在linux中可執行檔沒有統一的尾碼,系統是從檔案的屬性來區分的,這一點跟window下是大不一樣的。 那麼gcc的源檔案是否可以不管檔案的尾碼呢?答案是否定的,gcc是要通過尾碼來區別輸入檔案的類別的,如:.c, .a(由目標檔案構成的庫檔案),.C, .cc , .cxx(是C++原始碼檔案),.h(標頭檔),.i(已經預先處理過的C原始碼檔案), .ii(已預先處理過的c++原始碼檔案),.o(編譯後的目標檔案),.s(彙編原始碼檔案),.S(經過預彙編的彙編源檔案); gcc的編譯過程可以分為四個階段,即:預先處理,編譯,彙編,連結。 www.2cto.com 下面看一個簡單的例子: gcc常用編譯選項: 1. -o(小o) 指定編譯後的可執行檔名,預設為 XXX.out 2. -c 只編譯,不會進行串連的.o檔案,不可執行 3. -g 編譯出可調試的程式,即如果我們需要對程式進行調試,則編譯時間必須帶-g ,此時產生的檔案將會大很多 4. - O 及-O2 對編譯連結過程進行最佳化 5.-I(大i) 如-I/home/a 指定外加標頭檔目錄 其實也可把自己做的標頭檔直接放在 /usr/include/下 www.2cto.com 6.-L 指定庫所在路徑,跟-I原理一樣 7. -static 靜態連結 , 即把庫整合到程式中合成一個可執行檔 ,相比於動態庫,則動態庫只會在運行時動態地調用函數庫。靜態連結浪費空間,動態連結耗時。預設採用動態連結,但只要編譯時間加上-static選項就會進行靜態連結。 8. -Wall : 產生所有警告資訊 而 -w 則不產生任何警告資訊 9. -D 相當於#define 進行宏定義。 如 gcc -DYES hello.c -o hello 這裡定義了一個名為YES的宏 作者 stewen_001