簡介
目前在Linux下最常用的C語言編譯器是GCC(GUN Compiler Collection).是GUN項目中符合ANSI C標準的編譯系統。
能夠編譯C、C++、Object C等語言編寫的程序,可以通過不同的前端模塊來支持各種語言,如JAVA等。
基本常用參數
GCC編譯器的調用參數有100多個,介紹幾個最基本常用的參數。
GCC的基本用法
gcc [options] [filenames]
options爲編譯器需要的參數,filenames爲相關文件的名稱。
- -c
只編譯,不鏈接成爲可執行文件,生成.o後綴的目標文件,通常用於編譯不包含主程序的子程序文件。
- -o
確定輸出文件的名稱(不能與源文件同名),不給名稱默認爲a.out。
- -g
生產符號調試工具(GUN的GDB)所必要的符號訊息,要對源碼進行調試,必須加入
- -O
對程序進行優化編譯、鏈接,但編譯、鏈接的速度變慢
- -O2
比-O更好的優化編譯、鏈接,但更加慢
GCC在編譯不符合ANSI/ISO C語言標準的源碼時,加上-pedantic選項,使用了拓展語法的地方會產生相應的警告,但不能保證程序完全符合兼容ANSI/ISO C標準。
-Wall選項。使GCC儘可能產生多的警告信息。
-Werror選項,將所有警告當作錯誤處理。
調試
如果在編譯時生成調試符號信息,可以使用GCC的-g或-ggdb選項。GCC在產生調試符號採用了分級,在-g選項後附加參數1、2、3來指定在代碼中計入調試信息的多少,默認2,-g2。3最詳細,1最少。
調試選項會使生成的二進制文件的大小劇增,增加程序在執行時的開銷,盡在軟件開發和調試階段使用。
GCC還支持其他調試選項-p、-pg,他們會將剖析(Profiling)信息加入到最終生成的二進制代碼中,對找出程序性能的瓶頸有幫助。
-p選項:會在生成的代碼中加入通用剖析工具Prof能夠識別的統計信息
-pg選項:生成只有GUN剖析工具Gprof才能識別的統計信息
優化
-O、-O2能夠程序帶來更好的執行性能
但在以下場合避免優化代碼
- 程序開發時
- 資源受限時(優化會增加執行代碼的體積)
- 跟蹤調試時
編譯基本流程
預處理Pre-Processing
編譯Compiling
彙編Assembling
鏈接Linking
其他編譯工具
C++編譯器G++
EGCS
F2C和P2C(Fortran代碼轉C代碼,Pascal代碼轉C代碼)