本文記錄一些gcc相關引數,便於個人記憶,持續更新。
一、 -g
-g 可執行程式包含除錯資訊。-g 為了除錯用的,加入後可用gdb除錯。
二、 -o
-o指定輸出檔名,格式: -o output_filename,確定輸出檔案的名稱為output_filename,如果未指定會輸出為預設檔案,比如可執行檔案會生成為a.out,目標檔名是source.o,其中source是原始檔等。
三、-c
-c 只編譯不鏈結
產生.o檔案,就是目標檔案,不產生執行檔案。
四、-d
-d的作用是新增巨集定義,如-dndebug,作用如下:
ndebug
標頭檔案assert.h定義的巨集受ndebug的影響。如果預程式在處理這個標頭檔案時已經定義了ndebug,assert巨集的內容就定義為空,這意味著assert巨集不起作用。
所以,可以在最終發布程式的時候可以用-dndebug關閉斷言功能或者把#define ndebug加每個原始檔中,但這條語句必須放在#include 之前。
1 #include 2view code3#definne ndebug
4 #include 5
6int
main()
7
trace(),assert()都只是在debug模式下才起作用的,如果定義了ndebug,編譯器會以為是非debug的模式(雖然編譯出來的程式還是很大),而且還可以進行除錯,此時trace(),assert()就沒有用了。就如同你編譯成release版的時候這些沒有用一樣。
#define debug 會重新開啟除錯開關
ndebug巨集由於字面意思,也被用於作為判斷debug/release版本的巨集,不過這個是編譯器、環境相關的,並不可靠。比如vc中,對生成的release版本專案,預設定義這個巨集,而gcc並沒有定義,得用-dndebug引數來定義。
五、-w
-w(小寫),表示關閉編譯時的警告,也就是編譯後不顯示任何warning,因為有時在編譯時編譯器會顯示一些例如資料轉換之類的警告,這些警告是我們平時可以忽略的。
六、-w和-wall
-w選項類似-wall,會顯示警告,但是只顯示編譯器認為會出現錯誤的警告。
-wall選項意思是編譯後顯示所有警告。
七、-o3
-o(大寫),意思開始編譯優化,level為3。
八、-shared
如果想建立乙個動態鏈結庫,可以使用gcc的-shared選項。輸入檔案可以是原始檔、彙編檔案或者目標檔案。
九、-fpic
-fpic選項作用於編譯階段,告訴編譯器產生與位置無關**(position-independent code)。
這樣一來,產生的**中就沒有絕對位址了,全部使用相對位址,所以**可以被載入器載入到記憶體的任意位置,都可以正確執行。
這是共享庫所要求的,共享庫被載入時,在記憶體的位置是不固定的。
十、-i引數與-l引數
-i(大寫i)用於指定頭檔案目錄。
-i /home/xhx/include表示將/home/xhx/include目錄作為第乙個尋找標頭檔案的目錄,尋找順序是:/home/xhx/include -> /usr/include -> /usr/local/include
-l用於指定程式鏈結庫路徑。
-l/home/xhx/lib表示將/home/xhx/lib目錄作為第乙個尋找庫檔案的目錄,尋找順序是:/home/xhx/lib -> /lib -> /usr/lib -> /usr/local/lib
-l (小寫l)用於指定鏈結庫名稱。
-lxhx 表示在上面的lib路徑中尋找libxhx.so的動態庫檔案,如果編譯選項中加入-static 表示尋找libxhx.a靜態庫檔案。
gcc 引數詳解
gcc引數詳解 介紹 gcc and g 分別是gnu的c c 編譯器 gcc g 在執行編譯工作的時候,總共需要4步 1.預處理,生成.i的檔案 預處理器 cpp 2.將預處理後的檔案不轉換成組合語言,生成檔案.s 編譯器 egcs 3.有彙編變為目標 機器 生成.o的檔案 彙編器 as 4.連線...
gcc引數詳解
gcc and g 分別是gnu的c c 編譯器 gcc g 在執行編譯工作的時候,總共需要4步 1.預處理,生成.i的檔案 預處理器cpp 2.將預處理後的檔案不轉換成組合語言,生成檔案.s 編譯器egcs 3.有彙編變為目標 機器 生成.o的檔案 彙編器as 4.連線目標 生成可執行程式 鏈結器...
GCC引數詳解
gcc and g 分別是gnu的c c 編譯器 gcc g 在執行編譯工作的時候,總共需要4步 1.預處理,生成.i的檔案 預處理器cpp 2.將預處理後的檔案不轉換成組合語言,生成檔案.s 編譯器egcs 3.有彙編變為目標 機器 生成.o的檔案 彙編器as 4.連線目標 生成可執行程式 鏈結器...