隨想錄(被低估的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
顯示幫助資訊,如果實在記不得了,就用用這個選項好了