1.GCC相關介紹
GCC與gcc有什么不同?
● GCC(GNU Compiler Collection)
GNU編譯器集合,包含眾多語言的編譯器:C、C++、Java、D、Objective-C、etc
●gcc:特指GCC中的C語言編譯器
GCC VS 嵌入式
●多數嵌入式操作系統都基于GCC進行源碼編譯
●實際開發中的應用
內核開發:gcc
應用開發:gcc / g++ / gdc
2 初識編譯器
●gcc將代碼編譯成可執行程序的過程會完成預處理(preprocessing)、編譯(compilation)、匯編(assembly)、鏈接(linking)四個步驟
●編譯器由預處理器(cpp工具,C Preprocessor)、編譯器(cc工具,C and C++ compiler)、匯編器(as工具,assembler)、連接器(ld工具)組成
3 gcc關鍵編譯選項
3.1 預處理指令
3.1.1 指令格式
gcc -E file.c -o file.i
3.1.2 預處理文件相關內容
從file.i文件中我們可以看到存在大量的以“#”開頭的行。每行的格式是“# 行號 文件名 標志“,其中的”行號“與”文件名“表示從它后一行開始的內容來源于哪一個文件的哪一行;標志可以是1、2、3和4四個數字,每個數字的含義如下:
當file.c使用到非系統頭文件且它們不在當前目錄下時,需要通過使用gcc的-I參數加以指定,否則gcc會因為無法獲得必要的頭文件進行宏展開而報錯。
3.2 編譯指令
3.2.1 指令格式
gcc -S file.i -o file.sgcc -S -O2 file.c -o file.s
3.2.2 說明
使用-S參數時,我們可以根據需要使用-O選項。
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鏈接器來生成的,我們可以通過映射文件了解一個程序文件中各符號在內存中的布局信息。gcc的-Wl選項用于指定傳遞給鏈接器的選項,-Map=file.map選項由gcc傳遞給鏈接器以指示鏈接器為我們生成名為file.map的映射文件。在使用-Wl選項時,它后面的選項如有多個則需要用逗號加以分割。
3.5 宏定義
3.5.1 指令格式
gcc -D'TEST="test"' file.c
3.5.2 說明
如果宏為字符串時,則需要用單引號引起來。
3.6 獲取系統頭文件路徑
3.6.1 指令格式
gcc -v file.c
3.6.2 說明
系統頭文件是指C語言本身和操作系統相關的頭文件。在使用-v選項獲取系統頭文件路徑時,必須后面帶一個有效的C程序源文件,否則gcc輸出的信息將不包含系統頭文件路徑這一內容。
3.7 生成依賴關系
3.7.1 指令格式
獲取目標的完整依賴關系:gcc -M test.c獲取目標的部分依賴關系:gcc -MM test.c
3.7.2 說明
由于系統頭文件在絕大多數情形下是不會改變的,因此在構造make所需的依賴關系時不必將它們納入其中。通過-MM選項,可以讓gcc生成不包含系統頭文件的依賴關系。
3.8 指定庫文件及庫文件搜索路徑
3.8.1 指令格式
-L選項:指定庫文件的搜索路徑-l選項:指定庫文件ar crs libfunc.a func.ogcc test.c -L. -lfunc
3.8.2 說明
注意,-L選項用于告訴gcc可以從哪個目錄查找庫文件,可以多次使用它以指定多個目錄;-I選項則用于告訴gcc在生成可執行程序時需要鏈接的庫名,這一選項同樣可以多次使用以指定多個庫。使用-l選項時要注意后面所跟的名字并不包括“lib”前綴和“.a”后綴。
-
嵌入式
+關注
關注
5093文章
19178瀏覽量
307709 -
C語言
+關注
關注
180文章
7614瀏覽量
137729 -
編譯器
+關注
關注
1文章
1642瀏覽量
49288
原文標題:初識?嵌入式C語言編譯器:GCC
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
嵌入式操作系統有哪些
嵌入式Linux操作系統的使用
嵌入式操作系統uClinux和eCos的比較
![<b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統</b>uClinux和eCos的比較](https://file1.elecfans.com//web2/M00/A5/DE/wKgZomUMOoeAROrDAAAQOwU0Lz8232.jpg)
評論