gcc編譯引數詳解概述
gcc 編譯器是經常使用的,可是,自己卻沒有針對它做過專門的研究,當遇到問題了,總結一下,算是對未來有個積累吧。
一 關於編譯告警:
1 -w : 關閉所有警告,不建議使用
2 -W 開啟素有gcc 能提供的警告
3 -werror : 將所有警告轉為錯誤,開啟該選項,遇到警告會終止編譯
4 -Wall: 編譯後顯示所有警告.
二 關於節省空間:
1 概念:GCC連結操作是以section作為最小的處理單元,只要一個section中的某個符號被引用,該section就會被加入到可執行程式中去。因此,GCC在編譯時可以使用 -ffunction-sections和 -fdata-sections 將每個函式或符號建立為一個sections,其中每個sections名與function或data名保持一致。而在連結階段, -Wl,–gc-sections 指示連結器去掉不用的section(其中-wl, 表示後面的引數 -gc-sections 傳遞給連結器),這樣就能減少最終的可執行程式的大小了。
2 使用方法:
CFLAGS += -ffunction-sections -fdata-sections
LDFLAGS += -Wl,--gc-sections
三 關於內建函式:
1 __builtin_popcount(x):x中1的個數。
2 __builtin_ctz(x):x末尾0的個數。x=0時結果未定義。
3 __builtin_clz(x):x前導0的個數。x=0時結果未定義。上面的巨集中x都是unsigned int型的,如果傳入signed或者是char型,會被強制轉換成unsigned int。
4 __builtin_parity(x):x中1的奇偶性。
5 __builtin_return_address(n):當前函式的第n級呼叫者的地址,用的最多的就是__builtin_return_address(0),即獲得當前函式的呼叫者的地址。注意,該函式實現是體系結構相關的,有些體系結構只實現了n=0的返回結果。
四 關於優化選項:
1 -oN :指定程式碼的優化等級為N,可取值為0,1,2,3; o0沒有優化,o3優化級別最高。
2 -os 使用了-o2的部分優化選項,同事對程式碼尺寸進行了優化。
五 關於除錯:
1 -v 顯示gcc 執行的詳細過程,以及gcc和相關程式的版本號.
2
參考文件: