日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

【Linux】GCC程序开发工具(上)

發(fā)布時(shí)間:2024/4/24 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Linux】GCC程序开发工具(上) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

00. 目錄

文章目錄

    • 00. 目錄
    • 01. GNU工具概述
    • 02. 常用文本文件
    • 03. 常用二進(jìn)制文件
    • 04. Binutils工具集
    • 05. GCC工具
    • 06. 附錄

01. GNU工具概述

? 在Linux中,GNU Tools是主要的程序的開發(fā)工具,這組工具主要用于生成代碼和分析程序。GNU Tools最重要的組成部分是GCC。GCC是GNU Compiler Collection的縮寫,是一個(gè)非常優(yōu)秀的跨平臺(tái)編譯器集合,支持x86、ARM、MIPS和PowerPC等多種目標(biāo)平臺(tái),支持C、C++、Java、ADA、Fortran和Pascal等多種高級(jí)語(yǔ)言。

? GCC能完成從C、C++、Objective-C等源文件向運(yùn)行在特定CPU硬件上的目標(biāo)代碼的轉(zhuǎn)換。對(duì)于通用計(jì)算機(jī)、一般使用GCC生成x86的可執(zhí)行代碼,對(duì)于嵌入式開發(fā)系統(tǒng)使用交叉編譯GCC,生成目標(biāo)機(jī)可以執(zhí)行的程序。

?

02. 常用文本文件

*.c C語(yǔ)言源文件

*.C *.cxx *.cc C++語(yǔ)言源文件

*.i 預(yù)處理后的C語(yǔ)言源文件

*.ii 預(yù)處理后的C++語(yǔ)言源文件

*.s *.S 匯編語(yǔ)言文件

*.h 頭文件

03. 常用二進(jìn)制文件

*.o 目標(biāo)文件

*.so 動(dòng)態(tài)庫(kù)

*.a 靜態(tài)庫(kù)

.c為后綴的文件,C語(yǔ)言源代碼文件;

.a為后綴的文件,是由目標(biāo)文件構(gòu)成的檔案庫(kù)文件;

.C,.cc或.cxx 為后綴的文件,是C++源代碼文件且必須要經(jīng)過預(yù)處理;

.h為后綴的文件,是程序所包含的頭文件;

.i 為后綴的文件,是C源代碼文件且不應(yīng)該對(duì)其執(zhí)行預(yù)處理;

.ii為后綴的文件,是C++源代碼文件且不應(yīng)該對(duì)其執(zhí)行預(yù)處理;

.m為后綴的文件,是Objective-C源代碼文件;

.mm為后綴的文件是Objective-C++源代碼文件;

.o為后綴的文件,是編譯后的目標(biāo)文件;

.s為后綴的文件,是匯編語(yǔ)言源代碼文件;

.S為后綴的文件,是經(jīng)過預(yù)編譯的匯編語(yǔ)言源代碼文件。

04. Binutils工具集

? GCC是一組工具的集合,包含了預(yù)處理器、編譯器、匯編器、連接器部分。當(dāng)使用GCC的時(shí)候,將根據(jù)需要調(diào)用相應(yīng)的工具。對(duì)于默認(rèn)的文件名,GCC可以自動(dòng)選擇工具來完成文件處理過程。從C語(yǔ)言的源程序到可執(zhí)行文件的轉(zhuǎn)換,實(shí)質(zhì)上是依靠GCC調(diào)用一系列工具完成的。

? Binutils是一個(gè)二進(jìn)制工具的集合,包含了匯編、鏈接以及一系列的輔助工具。binutils是輔助GCC的重要工具集,主要包含以下的工具。

as: GNU匯編器,用于將處理器的匯編格式代碼轉(zhuǎn)換成可執(zhí)行代碼,并存儲(chǔ)到目標(biāo)文件.o文件中

ld: GNU連接器,用于將一個(gè)或者多個(gè)目標(biāo)文件(.o)、庫(kù)組合成一個(gè)可執(zhí)行的程序,或者生成靜態(tài)庫(kù)或者靜態(tài)庫(kù)。

ar: 歸檔工具,可以將多個(gè)文件組合成一個(gè)大文件,并且可以讀取原始文件的內(nèi)容

strip: 去除文件中的符號(hào)

nm: 可以i顯示目標(biāo)文件中的符號(hào)

objcopy: 轉(zhuǎn)換二進(jìn)制代碼的工具,可以將二進(jìn)制代碼轉(zhuǎn)換成各種格式

objdump: 顯示目標(biāo)文件的反匯編工具

readelf: 顯示ELF文件的各種信息

strings: 顯示文件中可打印字符

ranlib: 產(chǎn)生歸檔文件的索引,并將其保存到歸檔文件中。

addr2line: 可以將一個(gè)可執(zhí)行程序的地址映射到源文件的對(duì)應(yīng)的行

gprof: 顯示程序調(diào)用段的各種信息。

?

05. GCC工具

5.1 gcc用法參考

[root@deng test]# gcc --help 用法:gcc [選項(xiàng)] 文件... 選項(xiàng):-pass-exit-codes 在某一階段退出時(shí)返回最高的錯(cuò)誤碼--help 顯示此幫助說明--target-help 顯示目標(biāo)機(jī)器特定的命令行選項(xiàng)(使用‘-v --help’顯示子進(jìn)程的命令行參數(shù))-dumpspecs 顯示所有內(nèi)建 spec 字符串-dumpversion 顯示編譯器的版本號(hào)-dumpmachine 顯示編譯器的目標(biāo)處理器-print-search-dirs 顯示編譯器的搜索路徑-print-libgcc-file-name 顯示編譯器伴隨庫(kù)的名稱-print-file-name=<庫(kù)> 顯示 <庫(kù)> 的完整路徑-print-prog-name=<程序> 顯示編譯器組件 <程序> 的完整路徑-print-multi-directory 顯示不同版本 libgcc 的根目錄-print-multi-lib 顯示命令行選項(xiàng)和多個(gè)版本庫(kù)搜索路徑間的映射-print-multi-os-directory 顯示操作系統(tǒng)庫(kù)的相對(duì)路徑-Wa,<選項(xiàng)> 將逗號(hào)分隔的 <選項(xiàng)> 傳遞給匯編器-Wp,<選項(xiàng)> 將逗號(hào)分隔的 <選項(xiàng)> 傳遞給預(yù)處理器-Wl,<選項(xiàng)> 將逗號(hào)分隔的 <選項(xiàng)> 傳遞給鏈接器-Xassembler <參數(shù)><參數(shù)> 傳遞給匯編器-Xpreprocessor <參數(shù)><參數(shù)> 傳遞給預(yù)處理器-Xlinker <參數(shù)><參數(shù)> 傳遞給鏈接器-combine 將多個(gè)源文件一次性傳遞給匯編器-save-temps 不刪除中間文件-pipe 使用管道代替臨時(shí)文件-time 為每個(gè)子進(jìn)程計(jì)時(shí)-specs=<文件><文件> 的內(nèi)容覆蓋內(nèi)建的 specs 文件-std=<標(biāo)準(zhǔn)> 指定輸入源文件遵循的標(biāo)準(zhǔn)--sysroot=<目錄><目錄> 作為頭文件和庫(kù)文件的根目錄-B <目錄><目錄> 添加到編譯器的搜索路徑中-b <機(jī)器> 為 gcc 指定目標(biāo)機(jī)器(如果有安裝)-V <版本> 運(yùn)行指定版本的 gcc(如果有安裝)-v 顯示編譯器調(diào)用的程序-### 與 -v 類似,但選項(xiàng)被引號(hào)括住,并且不執(zhí)行命令-E 僅作預(yù)處理,不進(jìn)行編譯、匯編和鏈接-S 編譯到匯編語(yǔ)言,不進(jìn)行匯編和鏈接-c 編譯、匯編到目標(biāo)代碼,不進(jìn)行鏈接-o <文件> 輸出到 <文件>-x <語(yǔ)言> 指定其后輸入文件的語(yǔ)言允許的語(yǔ)言包括:c c++ assembler none‘none’意味著恢復(fù)默認(rèn)行為,即根據(jù)文件的擴(kuò)展名猜測(cè)源文件的語(yǔ)言-w 不顯示警告信息-W 指定需要顯示的警告信息-Wall 表示顯示所有的警告信息-Werr 將警告信息當(dāng)成錯(cuò)誤、并終止編譯-DMACRO 定義宏MACRO為字符串1-DMACRO=DEF 定義MACRO宏為字符串DEF-UMACRO 取消對(duì)MACRO宏的定義-ggdb 生成可被gdb使用的標(biāo)準(zhǔn)調(diào)試信息-mXXX 針對(duì)XXX CPU進(jìn)行優(yōu)化,例如XXX可以是486 586等-O0 不進(jìn)行代碼優(yōu)化-O或者-O1 進(jìn)行一般的代碼優(yōu)化,減少執(zhí)行代碼大小和執(zhí)行的時(shí)間-O2 比-O1進(jìn)行更多的優(yōu)化,減少執(zhí)行代碼大小和執(zhí)行的時(shí)間-O3 比-O2更進(jìn)一步優(yōu)化-MM 輸出源文件的依賴關(guān)系-ansi 編譯器將所有的gnu的編譯器特性都關(guān)掉,可以讓程序和Ansi標(biāo)準(zhǔn)兼容-include file 編譯之前將file包含進(jìn)去,相當(dāng)于在所有編譯的源文件最前面加入include <file>語(yǔ)句-imacros file 與-include file一樣,不過這個(gè)文件在具體編譯的時(shí)候只有里面定義的宏才起作用,所以只用來在file文件中定義宏-nostdinc 在搜尋include的文件路徑中去掉標(biāo)準(zhǔn)的C語(yǔ)言頭文件搜索路徑,例如stdin.h文件就是放在標(biāo)準(zhǔn)頭文件搜索路徑下。-C 通-E參數(shù)配合使用,讓預(yù)處理后的結(jié)果保留注釋,一遍程序更易讀。-nostartfiles 在鏈接的時(shí)候不把系統(tǒng)相關(guān)的啟動(dòng)代碼鏈接起來-nostdlib 在鏈接的時(shí)候不把標(biāo)準(zhǔn)庫(kù)鏈接進(jìn)來以 -g、-f、-m、-O、-W 或 --param 開頭的選項(xiàng)將由 gcc 自動(dòng)傳遞給其調(diào)用的不同子進(jìn)程。若要向這些進(jìn)程傳遞其他選項(xiàng),必須使用 -W<字母> 選項(xiàng)。

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. 表示包含當(dāng)前目錄作為頭文件搜索路徑,這個(gè)選項(xiàng)用于增加搜索頭文件的路徑 -pipe: 表示使用管道替換臨時(shí)文件 -o: 指定輸出地目標(biāo)文件的名稱

06. 附錄

6.1【Linux】GCC程序開發(fā)工具(上)
6.2 【Linux】GCC程序開發(fā)工具(中)
6.3 【Linux】GCC程序開發(fā)工具(下)

總結(jié)

以上是生活随笔為你收集整理的【Linux】GCC程序开发工具(上)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。