【Linux】GCC程序开发工具(上)
00. 目錄
文章目錄
- 00. 目錄
- 01. GNU工具概述
- 02. 常用文本文件
- 03. 常用二進制文件
- 04. Binutils工具集
- 05. GCC工具
- 06. 附錄
01. GNU工具概述
? 在Linux中,GNU Tools是主要的程序的開發(fā)工具,這組工具主要用于生成代碼和分析程序。GNU Tools最重要的組成部分是GCC。GCC是GNU Compiler Collection的縮寫,是一個非常優(yōu)秀的跨平臺編譯器集合,支持x86、ARM、MIPS和PowerPC等多種目標平臺,支持C、C++、Java、ADA、Fortran和Pascal等多種高級語言。
? GCC能完成從C、C++、Objective-C等源文件向運行在特定CPU硬件上的目標代碼的轉(zhuǎn)換。對于通用計算機、一般使用GCC生成x86的可執(zhí)行代碼,對于嵌入式開發(fā)系統(tǒng)使用交叉編譯GCC,生成目標機可以執(zhí)行的程序。
?
02. 常用文本文件
*.c C語言源文件
*.C *.cxx *.cc C++語言源文件
*.i 預處理后的C語言源文件
*.ii 預處理后的C++語言源文件
*.s *.S 匯編語言文件
*.h 頭文件
03. 常用二進制文件
*.o 目標文件
*.so 動態(tài)庫
*.a 靜態(tài)庫
.c為后綴的文件,C語言源代碼文件;
.a為后綴的文件,是由目標文件構(gòu)成的檔案庫文件;
.C,.cc或.cxx 為后綴的文件,是C++源代碼文件且必須要經(jīng)過預處理;
.h為后綴的文件,是程序所包含的頭文件;
.i 為后綴的文件,是C源代碼文件且不應該對其執(zhí)行預處理;
.ii為后綴的文件,是C++源代碼文件且不應該對其執(zhí)行預處理;
.m為后綴的文件,是Objective-C源代碼文件;
.mm為后綴的文件是Objective-C++源代碼文件;
.o為后綴的文件,是編譯后的目標文件;
.s為后綴的文件,是匯編語言源代碼文件;
.S為后綴的文件,是經(jīng)過預編譯的匯編語言源代碼文件。
04. Binutils工具集
? GCC是一組工具的集合,包含了預處理器、編譯器、匯編器、連接器部分。當使用GCC的時候,將根據(jù)需要調(diào)用相應的工具。對于默認的文件名,GCC可以自動選擇工具來完成文件處理過程。從C語言的源程序到可執(zhí)行文件的轉(zhuǎn)換,實質(zhì)上是依靠GCC調(diào)用一系列工具完成的。
? Binutils是一個二進制工具的集合,包含了匯編、鏈接以及一系列的輔助工具。binutils是輔助GCC的重要工具集,主要包含以下的工具。
as: GNU匯編器,用于將處理器的匯編格式代碼轉(zhuǎn)換成可執(zhí)行代碼,并存儲到目標文件.o文件中
ld: GNU連接器,用于將一個或者多個目標文件(.o)、庫組合成一個可執(zhí)行的程序,或者生成靜態(tài)庫或者靜態(tài)庫。
ar: 歸檔工具,可以將多個文件組合成一個大文件,并且可以讀取原始文件的內(nèi)容
strip: 去除文件中的符號
nm: 可以i顯示目標文件中的符號
objcopy: 轉(zhuǎn)換二進制代碼的工具,可以將二進制代碼轉(zhuǎn)換成各種格式
objdump: 顯示目標文件的反匯編工具
readelf: 顯示ELF文件的各種信息
strings: 顯示文件中可打印字符
ranlib: 產(chǎn)生歸檔文件的索引,并將其保存到歸檔文件中。
addr2line: 可以將一個可執(zhí)行程序的地址映射到源文件的對應的行
gprof: 顯示程序調(diào)用段的各種信息。
?
05. GCC工具
5.1 gcc用法參考
[root@deng test]# gcc --help 用法:gcc [選項] 文件... 選項:-pass-exit-codes 在某一階段退出時返回最高的錯誤碼--help 顯示此幫助說明--target-help 顯示目標機器特定的命令行選項(使用‘-v --help’顯示子進程的命令行參數(shù))-dumpspecs 顯示所有內(nèi)建 spec 字符串-dumpversion 顯示編譯器的版本號-dumpmachine 顯示編譯器的目標處理器-print-search-dirs 顯示編譯器的搜索路徑-print-libgcc-file-name 顯示編譯器伴隨庫的名稱-print-file-name=<庫> 顯示 <庫> 的完整路徑-print-prog-name=<程序> 顯示編譯器組件 <程序> 的完整路徑-print-multi-directory 顯示不同版本 libgcc 的根目錄-print-multi-lib 顯示命令行選項和多個版本庫搜索路徑間的映射-print-multi-os-directory 顯示操作系統(tǒng)庫的相對路徑-Wa,<選項> 將逗號分隔的 <選項> 傳遞給匯編器-Wp,<選項> 將逗號分隔的 <選項> 傳遞給預處理器-Wl,<選項> 將逗號分隔的 <選項> 傳遞給鏈接器-Xassembler <參數(shù)> 將 <參數(shù)> 傳遞給匯編器-Xpreprocessor <參數(shù)> 將 <參數(shù)> 傳遞給預處理器-Xlinker <參數(shù)> 將 <參數(shù)> 傳遞給鏈接器-combine 將多個源文件一次性傳遞給匯編器-save-temps 不刪除中間文件-pipe 使用管道代替臨時文件-time 為每個子進程計時-specs=<文件> 用 <文件> 的內(nèi)容覆蓋內(nèi)建的 specs 文件-std=<標準> 指定輸入源文件遵循的標準--sysroot=<目錄> 將 <目錄> 作為頭文件和庫文件的根目錄-B <目錄> 將 <目錄> 添加到編譯器的搜索路徑中-b <機器> 為 gcc 指定目標機器(如果有安裝)-V <版本> 運行指定版本的 gcc(如果有安裝)-v 顯示編譯器調(diào)用的程序-### 與 -v 類似,但選項被引號括住,并且不執(zhí)行命令-E 僅作預處理,不進行編譯、匯編和鏈接-S 編譯到匯編語言,不進行匯編和鏈接-c 編譯、匯編到目標代碼,不進行鏈接-o <文件> 輸出到 <文件>-x <語言> 指定其后輸入文件的語言允許的語言包括:c c++ assembler none‘none’意味著恢復默認行為,即根據(jù)文件的擴展名猜測源文件的語言-w 不顯示警告信息-W 指定需要顯示的警告信息-Wall 表示顯示所有的警告信息-Werr 將警告信息當成錯誤、并終止編譯-DMACRO 定義宏MACRO為字符串1-DMACRO=DEF 定義MACRO宏為字符串DEF-UMACRO 取消對MACRO宏的定義-ggdb 生成可被gdb使用的標準調(diào)試信息-mXXX 針對XXX CPU進行優(yōu)化,例如XXX可以是486 586等-O0 不進行代碼優(yōu)化-O或者-O1 進行一般的代碼優(yōu)化,減少執(zhí)行代碼大小和執(zhí)行的時間-O2 比-O1進行更多的優(yōu)化,減少執(zhí)行代碼大小和執(zhí)行的時間-O3 比-O2更進一步優(yōu)化-MM 輸出源文件的依賴關(guān)系-ansi 編譯器將所有的gnu的編譯器特性都關(guān)掉,可以讓程序和Ansi標準兼容-include file 編譯之前將file包含進去,相當于在所有編譯的源文件最前面加入include <file>語句-imacros file 與-include file一樣,不過這個文件在具體編譯的時候只有里面定義的宏才起作用,所以只用來在file文件中定義宏-nostdinc 在搜尋include的文件路徑中去掉標準的C語言頭文件搜索路徑,例如stdin.h文件就是放在標準頭文件搜索路徑下。-C 通-E參數(shù)配合使用,讓預處理后的結(jié)果保留注釋,一遍程序更易讀。-nostartfiles 在鏈接的時候不把系統(tǒng)相關(guān)的啟動代碼鏈接起來-nostdlib 在鏈接的時候不把標準庫鏈接進來以 -g、-f、-m、-O、-W 或 --param 開頭的選項將由 gcc 自動傳遞給其調(diào)用的不同子進程。若要向這些進程傳遞其他選項,必須使用 -W<字母> 選項。5.2 參考示例
[root@deng test]# ls a.out main.c myputs.c myputs.h test.c test.h [root@deng test]# gcc -pipe -g -Wall -I. -c test.c -o test.o [root@deng test]# #解釋 -g: 表示含有調(diào)試信息 -Wall: 表示輸出所有的警告 -I. 表示包含當前目錄作為頭文件搜索路徑,這個選項用于增加搜索頭文件的路徑 -pipe: 表示使用管道替換臨時文件 -o: 指定輸出地目標文件的名稱06. 附錄
6.1【Linux】GCC程序開發(fā)工具(上)
6.2 【Linux】GCC程序開發(fā)工具(中)
6.3 【Linux】GCC程序開發(fā)工具(下)
總結(jié)
以上是生活随笔為你收集整理的【Linux】GCC程序开发工具(上)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C语言】C语言实现面向对象编程之多态
- 下一篇: 【IT资讯】Linus Torvalds