資源描述:
《arm-linux-gcc常用參數(shù)講解gcc編譯器使用方法》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、我們需要編譯出運(yùn)行在ARM平臺(tái)上的代碼,所使用的交叉編譯器為arm-linux-gcc。下面將arm-linux-gcc編譯工具的一些常用命令參數(shù)介紹給大家。在此之前首先介紹下編譯器的工作過(guò)程,在使用GCC編譯程序時(shí),編譯過(guò)程分為四個(gè)階段:1.預(yù)處理(Pre-Processing)2.編譯(Compiling)3.匯編(Assembling)4.鏈接(Linking)Linux程序員可以根據(jù)自己的需要讓GCC在編譯的任何階段結(jié)束,以便檢查或使用編譯器在該階段的輸出信息,或者對(duì)最后生成的二進(jìn)制文件進(jìn)行控制,以便通過(guò)加入不同數(shù)量和種類的調(diào)試代碼來(lái)為今后的調(diào)試做好準(zhǔn)備。和其它常
2、用的編譯器一樣,GCC也提供了靈活而強(qiáng)大的代碼優(yōu)化功能,利用它可以生成執(zhí)行效率更高的代碼。以文件example.c為例說(shuō)明它的用法0.arm-linux-gcc-oexampleexample.c不加-c、-S、-E參數(shù),編譯器將執(zhí)行預(yù)處理、編譯、匯編、連接操作直接生成可執(zhí)行代碼。-o參數(shù)用于指定輸出的文件,輸出文件名為example,如果不指定輸出文件,則默認(rèn)輸出a.out1.arm-linux-gcc-c-oexample.oexample.c-c參數(shù)將對(duì)源程序example.c進(jìn)行預(yù)處理、編譯、匯編操作,生成example.0文件去掉指定輸出選項(xiàng)"-oexample
3、.o"自動(dòng)輸出為example.o,所以說(shuō)在這里-o加不加都可以2.arm-linux-gcc-S-oexample.sexample.c-S參數(shù)將對(duì)源程序example.c進(jìn)行預(yù)處理、編譯,生成example.s文件-o選項(xiàng)同上3.arm-linux-gcc-E-oexample.iexample.c-E參數(shù)將對(duì)源程序example.c進(jìn)行預(yù)處理,生成example.i文件(不同版本不一樣,有的將預(yù)處理后的內(nèi)容打印到屏幕上)就是將#include,#define等進(jìn)行文件插入及宏擴(kuò)展等操作。4.arm-linux-gcc-v-oexampleexample.c加上-v參
4、數(shù),顯示編譯時(shí)的詳細(xì)信息,編譯器的版本,編譯過(guò)程等。5.arm-linux-gcc-g-oexampleexample.c-g選項(xiàng),加入GDB能夠使用的調(diào)試信息,使用GDB調(diào)試時(shí)比較方便。6.arm-linux-gcc-Wall-oexampleexample.c-Wall選項(xiàng)打開了所有需要注意的警告信息,像在聲明之前就使用的函數(shù),聲明后卻沒(méi)有使用的變量等。7.arm-linux-gcc-Ox-oexampleexample.c-Ox使用優(yōu)化選項(xiàng),X的值為空、0、1、2、30為不優(yōu)化,優(yōu)化的目的是減少代碼空間和提高執(zhí)行效率等,但相應(yīng)的編譯過(guò)程時(shí)間將較長(zhǎng)并占用較大的內(nèi)存空間
5、。8.arm-linux-gcc-I/home/include-oexampleexample.c-Idirname:將dirname所指出的目錄加入到程序頭文件目錄列表中。如果在預(yù)設(shè)系統(tǒng)及當(dāng)前目錄中沒(méi)有找到需要的文件,就到指定的dirname目錄中去尋找。9.arm-linux-gcc-L/home/lib-oexampleexample.c-Ldirname:將dirname所指出的目錄加入到庫(kù)文件的目錄列表中。在默認(rèn)狀態(tài)下,連接程序ld在系統(tǒng)的預(yù)設(shè)路徑中(如/usr/lib)尋找所需要的庫(kù)文件,這個(gè)選項(xiàng)告訴連接程序,首先到-L指定的目錄中去尋找,然后再到系統(tǒng)預(yù)設(shè)路徑
6、中尋找。10.arm-linux-gcc–static-olibexample.aexample.c靜態(tài)鏈接庫(kù)文件gcc在命令行上經(jīng)常使用的幾個(gè)選項(xiàng)是:-c只預(yù)處理、編譯和匯編源程序,不進(jìn)行連接。編譯器對(duì)每一個(gè)源程序產(chǎn)生一個(gè)目標(biāo)文件。-ofile確定輸出文件為file。如果沒(méi)有用-o選項(xiàng),缺省的可執(zhí)行文件的輸出是a.out,目標(biāo)文件和匯編文件的輸出對(duì)source.suffix分別是source.o和source.s,預(yù)處理的C源程序的輸出是標(biāo)準(zhǔn)輸出stdout。-Dmacro或-Dmacro=defn其作用類似于源程序里的#define。例如:%gcc-c-DHAVE_G
7、DBM-DHELP_FILE="help"cdict.c其中第一個(gè)-D選項(xiàng)定義宏HAVE_GDBM,在程序里可以用#ifdef去檢查它是否被設(shè)置。第二個(gè)-D選項(xiàng)將宏HELP_FILE定義為字符串“help”(由于反斜線的作用,引號(hào)實(shí)際上已成為該宏定義的一部分),這對(duì)于控制程序打開哪個(gè)文件是很有用的。-Umacro某些宏是被編譯程序自動(dòng)定義的。這些宏通??梢灾付ㄔ谄渲羞M(jìn)行編譯的計(jì)算機(jī)系統(tǒng)類型的符號(hào),用戶可以在編譯某程序時(shí)加上-v選項(xiàng)以查看gcc缺省定義了哪些宏。如果用戶想取消其中某個(gè)宏定義,用-Umacro選項(xiàng),這相當(dāng)于把#