一、基本信息 1. gcc --version查看系統(tǒng)上安裝GCC信息。
二、使用 1,gcc -Wall test.c -Wall 選項用于在編譯過程出問題時輸出警告信息。 gcc -Wall test.c -o test.elf -o 選項用于指定輸出的文件名。 2,把源代碼真正傳給編譯器這前,預(yù)處理器會執(zhí)行預(yù)處理指令,展開源代碼中的宏。A, -E選項可以在預(yù)處理完成時停下gcc使用-o選項可以把預(yù)處理的結(jié)果存到一個文件中。 gcc –E test.c –o test.i 常用的選項有 B, -Dname[=definition] 配合源代碼中的#ifdef name #endif預(yù)處理指令,可以實現(xiàn)條件編譯。 C,-Uname 取消name定義。 D,-Idirectory[:directory[…]]可以定義多個目錄用冒號分開? E,對源文件中的#include目錄的搜索順序為。 (1)源代碼目錄 (2)用-I指定的目錄 (3)環(huán)境變量C_INCLUDE_PATH和CPATH指定的目錄。 (4)系統(tǒng)默認(rèn)的include目錄。 3,編譯。GCC一般會把匯編語言輸出到臨時文件,并且在匯編器執(zhí)行完后立刻刪除,但可以使用-S選項,讓編譯程序在輸出匯編之后停止。 gcc –S test.c 4, 匯編。這個過程把匯編語言翻譯成二進(jìn)制文件二進(jìn)制文件是一個對像文件,包含機(jī)器執(zhí)行源文件指定的功能,還包含一個符號表,這個符號表描述源文件中有外部鏈接的所有對象。 A,-c 選項使得GCC不會鏈接此程序,而是產(chǎn)生對象文件。 B,GCC –Wa 選項把命令行參數(shù)傳遞給匯編器,比如我們希望匯編器使用-as=circle.sym選項??梢赃@樣寫 gcc –v –o circle –Wa,-as=circle.sym.-L circle.c -Wa后面有一個逗號,后面是選項列表,選項這間不能有空格。注意這個L選項不是GCC中的L選項。 5,鏈接,把多個二進(jìn)制文件鏈接成一個可執(zhí)行文件,在鏈接過程中必須完成程序中多個模塊之間的外部參考,把“參考符號”用對象實際的位置代換。簡單說鏈接就是把多個對象文件放在一個文件中。 有些庫可能不在GCC搜索路徑,有三種方法可以讓GCC找到這些庫。 (1),指定庫的完整路徑名 (2),使用-L選項指定路徑。 (3),把目錄加到LIBRARY_PATH環(huán)境變量中。 6,文件類型。 當(dāng)不是按照GCC的常用命名來命名源文件時可以用-x file_type選項來指明GCC如何對待這些文件??梢栽谝粋€命令行時多次使用-x選項,-x none會取消這些指示。 7,動態(tài)鏈接庫??梢允褂?/span>GCC的-shared選項建立。程序運(yùn)時要能找到這些動態(tài)庫。以下兩種:A,加到程序運(yùn)行的搜索PAHT中,B,用LD_LIBRARY_PATH指定路徑。 8,獨(dú)立程序。 9編譯器警告: -Werror 選項把警告當(dāng)作出錯處理。-W開頭的選項啟用大部分警告, Wswitch-default當(dāng)switch語句沒有default卷標(biāo),此選項會發(fā)出警告。 -Wall啟用大部分警告,但不是所有。例-Wshadow一個語句塊的作用域內(nèi)的變量與更大作用域的變量重名時會發(fā)出警告。 -Wextra會對合法但值得懷疑的地方發(fā)出警告。 10,優(yōu)化, -O0關(guān)閉所有優(yōu)化選項 -O ,-O1 -O2 -O3 -Os優(yōu)化占用空間,性能沒有優(yōu)化。 -f可以在選擇一種優(yōu)化而關(guān)閉其中的一些優(yōu)化技術(shù)。 11,用于特定架構(gòu)的選項。 12 調(diào)試,可以使用-g選項允許GCC在對象文件和執(zhí)行文件中包含符號表和源代碼行號信息。 13,剖析,使用-p選項會在程序中加入一個特別的函數(shù),在執(zhí)行時輸出剖析信息。可以通過剖析信息了解哪些函數(shù)最耗時。剖析信息存成一個名為mon.out文件,可以使用prof工具分析。 14 環(huán)境變量 CPATH,C_INCLUDE_PATH COMPILER_PATH GCC_EXEC_PREFIX LIBRARY_PATH LD_LIBRARY_PATH TMPDIR 各種先項參見《C語言核心技術(shù)》521頁或GCC參考手冊。
|
|