| | 8 | = 基本用法 = |
| | 9 | 設定編譯出的 object 檔檔名或是可執行檔檔名: |
| | 10 | 參數: -o out_put_filename |
| | 11 | 說明: 指定編譯出的檔名為 out_put_filename。 |
| | 12 | |
| | 13 | 範例: 本例將程式碼 'test.c' 編譯成可執行檔,並設定檔名為 'test'。 |
| | 14 | |
| | 15 | gcc test.c -o test |
| | 16 | |
| | 17 | 在編譯過程做最佳化 |
| | 18 | 參數: -O |
| | 19 | 說明: 在編譯過程做最佳化,以提升增快程式執行速度。 |
| | 20 | |
| | 21 | 範例:本例將程式碼 'test.c' 編譯成可執行檔 'test',並在編譯過程做最佳化'。 |
| | 22 | |
| | 23 | gcc -O test.c -o test |
| | 24 | |
| | 25 | 設定搜尋標頭檔目錄、程式庫檔的目錄及指定程式庫檔。 |
| | 26 | |
| | 27 | 設定搜尋標頭檔目錄 |
| | 28 | 參數: -Idir_name |
| | 29 | 說明: 將目錄 'dir_name' 設定為搜尋標頭檔目錄之一。 |
| | 30 | |
| | 31 | |
| | 32 | 設定搜尋程式庫目錄。 |
| | 33 | 參數: -Ldir_name |
| | 34 | 說明: 將目錄 'dir_name' 設定為搜尋程式庫目錄之一。 |
| | 35 | |
| | 36 | |
| | 37 | 設定程式庫檔案。 |
| | 38 | |
| | 39 | 參數: -lname |
| | 40 | 說明: 聯結程式庫 libname.a 。 |
| | 41 | |
| | 42 | 範例一:本例中假設你的程式檔名為test.c,數學函數如 sin等,所要聯結的程式庫為 libm.a。 |
| | 43 | |
| | 44 | gcc -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 test.c -o test |
| | 45 | |
| | 46 | 範例二:本例中假設你的程式檔名為 test.c,使用到 X window 函數,所需的 include 檔放在 /usr/X11R6/include 中,所須聯結的程式庫放在 /usr/X11R6/lib,所要聯結的程式庫為 libX11.a。 |
| | 47 | gcc -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 test.c -o test |
| | 48 | |
| | 49 | 提供進一步的資訊以便使用者找尋程式中的錯誤。 |
| | 50 | 參數: -Wall |
| | 51 | |
| | 52 | 說明: 輸出較多的警告訊息,以便找出程式的錯誤。 |
| | 53 | |
| | 54 | 範例: 編譯 test.c 時輸出較多的警告訊息。 |
| | 55 | |
| | 56 | gcc -Wall test.c |
| | 57 | |
| | 58 | 參數: -g |
| | 59 | |
| | 60 | 說明: 在編譯出可執行檔時,附加執行時除錯資訊,以供 gdb 讀取 (若要使用 ABSoft 的除錯程式,則須將參數改為 -gdwarf )。 |
| | 61 | |
| | 62 | 範例: 將 'test.c' 編譯成可執行檔 'test',並附加除錯資訊。 |
| | 63 | |
| | 64 | gcc -g test.c -o test |
| | 65 | |
| | 66 | |
| | 67 | |
| | 68 | 進階參數 |
| | 69 | 1. 僅編譯成 object 檔。 |
| | 70 | 參數: -c |
| | 71 | |
| | 72 | 說明: 僅編譯成 object 檔而不進行程式庫聯結。 |
| | 73 | |
| | 74 | 範例: 將 test.c 編譯成 object 檔 test.o。 |
| | 75 | |
| | 76 | gcc -c test.c -o test.o |
| | 77 | |
| | 78 | 2. 聯結數個 object 成可執行檔。 |
| | 79 | |
| | 80 | 範例: 將 'test1.o'、'test2.o' 和程式庫聯結後成為可執行檔 test。 |
| | 81 | |
| | 82 | gcc test1.o test2.o -o test |
| | 83 | |
| | 84 | 3. 觀察巨集展開情形: |
| | 85 | |
| | 86 | 參數: -E |
| | 87 | |
| | 88 | 說明:展開程式中的巨集以便了解巨集是否依照預期方式展開。 |
| | 89 | |
| | 90 | 範例:將 test1.c 中的巨集展開後儲存到 test1.c.ext 。 |
| | 91 | |
| | 92 | gcc -E test1.c > test1.c.ext |
| | 93 | |
| | 94 | 4. 產生組合語言程式碼: |
| | 95 | |
| | 96 | 參數: -S |
| | 97 | |
| | 98 | 範例:編譯 test.c 產生對應的組合語言程式碼檔 test.s。 |
| | 99 | |
| | 100 | gcc -S test.c -o test.s |
| | 101 | |
| | 102 | 編譯參數列表 -o out_put_filename 將編譯後產生的檔名設為 out_put_filename |
| | 103 | -O 編譯時做最佳化,以增加程式執行效率。 |
| | 104 | -c 將原始語言編譯成 .o 檔(object檔) 不做程式庫連結的工作。 |
| | 105 | -g 編譯出 .o 檔時,保留除錯的資訊,在連結後產生的可執行檔中包含 gdb 需要的資訊。(若要給 ABSoft 的除錯程式使用,須將此參數改為 -gdwarg ) |
| | 106 | -E 將原始語言編譯將 test.c 中的巨集展開,之後輸出到 stdout。 |
| | 107 | -L/usr/X11R6/lib 連結程式時,搜尋程式庫檔時,將 /usr/X11R6/lib 列入搜尋目錄。 |
| | 108 | -lm 在連結程式時,將 libm.a 列入搜尋檔案中。 |
| | 109 | -I/usr/X11R6/include 到 /usr/X11R6/include 找尋被 include 的檔案。 |
| | 110 | -S 產生 test.c 對應的組合語言程式檔 test.s 。 |
| | 111 | -Wall 產生比較多的警告訊息 (平常不須使用,但當找不到程式中的錯誤時,可以加以使用。) |
| | 112 | |
| | 113 | |
| | 114 | |
| | 115 | 快速入門 |
| | 116 | |
| | 117 | |
| | 118 | 範例:將 test.c 編譯成可執行檔 test 並在編譯過程中做最佳化。 |
| | 119 | |
| | 120 | gcc -O test.c -o test |
| | 121 | |
| | 122 | 範例: 將 test1.c 和 test2.c 編譯聯結成可執行檔 test 並在編譯過程中做最佳化。 |
| | 123 | |
| | 124 | gcc -O test1.c test2.c -o test |
| | 125 | |
| | 126 | |
| | 127 | 範例:若程式中有使用數學函數如 sin 等,編譯時須加入 -lm 。 |
| | 128 | |
| | 129 | gcc -O test.c -o test -lm |
| | 130 | |
| | 131 | 範例:發現程式有執行時錯誤,編譯後需用 GDB 除錯。 |
| | 132 | |
| | 133 | gcc -O -g test.c -o test |
| | 134 | |
| | 135 | 範例:發現程式有執行時錯誤,編譯後要跟 ABSoft F77 聯結後以 ABSoft 的除錯程式除錯。 |
| | 136 | gcc -O -gdwarf test.c -o test |
| | 137 | |
| | 138 | |
| | 139 | 更多的說明 |
| | 140 | man gcc |
| | 141 | info gcc |