1.GCC相關(guān)介紹
GCC與gcc有什么不同?
● GCC(GNU Compiler Collection)
GNU編譯器集合,包含眾多語言的編譯器:C、C++、Java、D、Objective-C、etc
●gcc:特指GCC中的C語言編譯器
GCC VS 嵌入式
●多數(shù)嵌入式操作系統(tǒng)都基于GCC進(jìn)行源碼編譯
●實(shí)際開發(fā)中的應(yīng)用
內(nèi)核開發(fā):gcc
應(yīng)用開發(fā):gcc / g++ / gdc
2 初識(shí)編譯器
●gcc將代碼編譯成可執(zhí)行程序的過程會(huì)完成預(yù)處理(preprocessing)、編譯(compilation)、匯編(assembly)、鏈接(linking)四個(gè)步驟
●編譯器由預(yù)處理器(cpp工具,C Preprocessor)、編譯器(cc工具,C and C++ compiler)、匯編器(as工具,assembler)、連接器(ld工具)組成
3 gcc關(guān)鍵編譯選項(xiàng)
3.1 預(yù)處理指令
3.1.1 指令格式
gcc -E file.c -o file.i
3.1.2 預(yù)處理文件相關(guān)內(nèi)容
從file.i文件中我們可以看到存在大量的以“#”開頭的行。每行的格式是“# 行號(hào) 文件名 標(biāo)志“,其中的”行號(hào)“與”文件名“表示從它后一行開始的內(nèi)容來源于哪一個(gè)文件的哪一行;標(biāo)志可以是1、2、3和4四個(gè)數(shù)字,每個(gè)數(shù)字的含義如下:
當(dāng)file.c使用到非系統(tǒng)頭文件且它們不在當(dāng)前目錄下時(shí),需要通過使用gcc的-I參數(shù)加以指定,否則gcc會(huì)因?yàn)闊o法獲得必要的頭文件進(jìn)行宏展開而報(bào)錯(cuò)。
3.2 編譯指令
3.2.1 指令格式
gcc -S file.i -o file.sgcc -S -O2 file.c -o file.s
3.2.2 說明
使用-S參數(shù)時(shí),我們可以根據(jù)需要使用-O選項(xiàng)。
3.3 匯編指令
3.3.1 指令格式
gcc -c file.s -o file.o
3.4 生成映射文件
3.4.1 指令格式
gcc -Wl,-Map=file.map file.c
3.4.2 說明
映射文件是通過ld鏈接器來生成的,我們可以通過映射文件了解一個(gè)程序文件中各符號(hào)在內(nèi)存中的布局信息。gcc的-Wl選項(xiàng)用于指定傳遞給鏈接器的選項(xiàng),-Map=file.map選項(xiàng)由gcc傳遞給鏈接器以指示鏈接器為我們生成名為file.map的映射文件。在使用-Wl選項(xiàng)時(shí),它后面的選項(xiàng)如有多個(gè)則需要用逗號(hào)加以分割。
3.5 宏定義
3.5.1 指令格式
gcc -D'TEST="test"' file.c
3.5.2 說明
如果宏為字符串時(shí),則需要用單引號(hào)引起來。
3.6 獲取系統(tǒng)頭文件路徑
3.6.1 指令格式
gcc -v file.c
3.6.2 說明
系統(tǒng)頭文件是指C語言本身和操作系統(tǒng)相關(guān)的頭文件。在使用-v選項(xiàng)獲取系統(tǒng)頭文件路徑時(shí),必須后面帶一個(gè)有效的C程序源文件,否則gcc輸出的信息將不包含系統(tǒng)頭文件路徑這一內(nèi)容。
3.7 生成依賴關(guān)系
3.7.1 指令格式
獲取目標(biāo)的完整依賴關(guān)系:gcc -M test.c獲取目標(biāo)的部分依賴關(guān)系:gcc -MM test.c
3.7.2 說明
由于系統(tǒng)頭文件在絕大多數(shù)情形下是不會(huì)改變的,因此在構(gòu)造make所需的依賴關(guān)系時(shí)不必將它們納入其中。通過-MM選項(xiàng),可以讓gcc生成不包含系統(tǒng)頭文件的依賴關(guān)系。
3.8 指定庫文件及庫文件搜索路徑
3.8.1 指令格式
-L選項(xiàng):指定庫文件的搜索路徑-l選項(xiàng):指定庫文件ar crs libfunc.a func.ogcc test.c -L. -lfunc
3.8.2 說明
注意,-L選項(xiàng)用于告訴gcc可以從哪個(gè)目錄查找?guī)煳募?,可以多次使用它以指定多個(gè)目錄;-I選項(xiàng)則用于告訴gcc在生成可執(zhí)行程序時(shí)需要鏈接的庫名,這一選項(xiàng)同樣可以多次使用以指定多個(gè)庫。使用-l選項(xiàng)時(shí)要注意后面所跟的名字并不包括“l(fā)ib”前綴和“.a”后綴。
-
嵌入式
+關(guān)注
關(guān)注
5060文章
18975瀏覽量
302094 -
C語言
+關(guān)注
關(guān)注
180文章
7595瀏覽量
135885 -
編譯器
+關(guān)注
關(guān)注
1文章
1617瀏覽量
49017
原文標(biāo)題:初識(shí)?嵌入式C語言編譯器:GCC
文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論