GCC是“GNU Compiler Collection”的縮寫,從字面意思可以知道它是一個編譯器集。gcc不止可以編譯器c語言,還能用于c++,java,object-C等語言程序。但是在這里,我們的嵌入式學(xué)習(xí)中,目前只去關(guān)注gcc在C語言方面的編譯功能。在Windows下比較流行的GCC移植版主要有三個。他們是MinGWCygwin#8203;和Djgpp。雖然,Djgpp是應(yīng)用于DOS系統(tǒng)的,考慮到windows對DOS的兼容,所以也將Djgpp納入其中了。
GCC編譯器介紹:
GCC是用于Unix,Unix-like系統(tǒng)的編譯器。不過,現(xiàn)在Windows下也出現(xiàn)了GCC的穩(wěn)定移植版。這要感謝Internet上眾多程序員的共同努力。
如今,在Windows下比較流行的GCC移植版主要有三個。他們是 MinGW,Cygwin和Djgpp。雖然,Djgpp是應(yīng)用于DOS系統(tǒng)的,考慮到windows對DOS的兼容,所以也將Djgpp納入其中了。
總體來說,MinGW,Cygwin和Djgpp各有特色,針對不同的應(yīng)用場合,可以選擇不同的移植版來滿足需要。MinGW這個系列的移植,主要方向是讓GCC的Windows移植版能使用Win32API來編程。而Cygwin的目標(biāo)是能讓Unix-like下的程序代碼在Windows下直接被編譯。至于Djgpp,則是想讓DOS下也能用上GCC。
所以,對于開發(fā)人員不同的需求。選擇合適的移植版會讓工作變得輕松而高效。 。
gcc編譯器使用方法
一、gcc編譯流程
GCC編譯器在編譯一份C代碼的時候,需要經(jīng)過以下4個步驟:
預(yù)處理(preprocessing):對 .c 源文件進行預(yù)處理,生成 .i 文件。
編譯(compilation):對 .i 文件進行編譯,生成 .s 匯編文件。
匯編(assembly):對 .s 文件進行匯編,生成 .o 目標(biāo)文件。
鏈接(linking):對 .o 文件進行鏈接,生成可執(zhí)行文件。
二、gcc命令使用
2.1 gcc命令格式定義
2.2 gcc命令常用參數(shù)
2.2.1 基本參數(shù)
-E:僅對源文件進行預(yù)處理,不進行編譯。結(jié)果直接輸出到顯示屏。
-S:對源文件進行預(yù)處理、編譯,不進行匯編。結(jié)果以 .s 文件形式保存,與 .c 源文件同名。
-c:對源文件進行預(yù)處理、編譯、匯編,不進行鏈接。結(jié)果以 .o 文件形式保存,與 .c 源文件同名。
-save-temps:保存編譯過程中所產(chǎn)生的所有中間文件。中間文件名與 .c 源文件同名,后綴為 .i 、.s、.o
2.2.2 調(diào)試參數(shù)
-o:將任何類型的輸出都存放至指定的文件中。
-Wall:打開編譯器的警告標(biāo)志,盡可能多的輸出警告信息。強烈建議,編譯時始終帶上 -Wall 選項。
-Werror:將所有的警告當(dāng)成錯誤處理,必須消除警告才能繼續(xù)編譯。
2.2.3 函數(shù)庫參數(shù)
-llibrary:手動指定函數(shù)庫library參與鏈接。庫名為library,文件名為liblibrary.a或liblibrary.so
-Ldir:手動添加一個路徑dir,用以搜索庫文件(.a 或 .so 文件,即手動指定的函數(shù)庫文件的所在目錄)。
-Idir:手動添加一個路徑dir,用以搜索頭文件(.h 文件,即源碼內(nèi)#include要包含的文件的所在目錄)。