1. 程式人生 > >隨想錄(被低估的gcc&g++)

隨想錄(被低估的gcc&g++)

【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】

 

    很多同學喜歡看程式碼,比如作業系統、資料庫、指令碼語言、android、虛擬軟體什麼的。但是卻很少人會喜歡去研究編譯器、聯結器。其實編譯器非常重要。一方面,它可以用來支援os、middle ware、app等各種軟體的編譯,另一方面它可以支援除錯、調優和系統性能分析。這些額外生成的資訊對於readelf、nm、strip、objdump、gdb非常有用。下面,我們就說說gcc&g++常用的一些選項。

 

1、-c

編譯c檔案

 

2、-o

生成目標檔案

 

3、-S

將c檔案生成彙編檔案

 

4、-include

包含特定標頭檔案

 

5、-I(大寫的i)

指明標頭檔案目錄

 

6、-l(小寫的l)

指明具體的動態庫名稱

 

7、-L

指明動態庫目錄

 

8、-D

新增預設macro定義

 

9、-static

強制生成一個exe檔案,不依賴動態庫,除錯動態庫問題時非常有效

 

10、-shared -fPIC

生成動態庫

 

11、-g

生成除錯資訊

 

12、-Werror

將warning看成是error,程式碼靜態檢查的時候非常有效

 

13、-O1, -O2, -O3

基於速度的優化

 

14、-Os

基於大小的優化

 

15、-M

獲取當前檔案依賴的標頭檔案,編寫Makefile的時候非常有效

 

16、-E

完成檔案預處理,此選項可以完成macro的翻譯

 

17、-fprofile-arcs -ftest-coverage

在每一行程式碼後生成統計資訊,用於gcov,主要分析程式碼覆蓋率等

 

18、-pg

在一個函式的入口和出口新增額外程式碼,用於gprof,主要分析程式碼效能,kernel中ftrace的靜態分析也是這個原理

 

19、-T

確認lds連線指令碼

 

20、-nostartfiles -nostdlib

沒有起始檔案,沒有標準庫,此選項主要用於firmware的編譯,不依賴於os

 

21、-m32, -m64

生成32位程式,生成64位程式

 

22、-std=c99

確定c或者cpp語言支援的語法標準

 

23、-v

顯示編譯全過程

 

24、--help

顯示幫助資訊,如果實在記不得了,就用用這個選項好了