1. 程式人生 > >gcc編譯引數詳解概述

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 

參考文件: