linux學(xué)習(xí)linux基礎(chǔ)gcc命令大全_第1頁(yè)
linux學(xué)習(xí)linux基礎(chǔ)gcc命令大全_第2頁(yè)
linux學(xué)習(xí)linux基礎(chǔ)gcc命令大全_第3頁(yè)
linux學(xué)習(xí)linux基礎(chǔ)gcc命令大全_第4頁(yè)
linux學(xué)習(xí)linux基礎(chǔ)gcc命令大全_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、GCC 選項(xiàng)GCC 有超過(guò) 100 個(gè)的編譯選項(xiàng)可用. 這些選項(xiàng)中的許多你可能永遠(yuǎn)都不會(huì)用 到, 但一些主要的選項(xiàng)將會(huì)頻繁用到. 很多的 GCC 選項(xiàng)包括一個(gè)以上的字符.因此你必須為每個(gè)選項(xiàng)指定各自的連字符, 并且就象大多數(shù) Linux 命令一樣你 不能在一個(gè)單獨(dú)的連字符后跟一組選項(xiàng). 例如, 下面的兩個(gè)命令是不同的:gcc -p -g test.cgcc -pg test.c第一條命令告訴 GCC 編譯 test.c 時(shí)為 prof 命令建立剖析(profile)信息并 且把調(diào)試信息加入到可執(zhí)行的文件里. 第二條命令只告訴 GCC 為 gprof 命令 建立剖析信息.當(dāng)你不用任何選項(xiàng)編譯一個(gè)

2、程序時(shí), GCC 將會(huì)建立(假定編譯成功)一個(gè)名為 a.out 的可執(zhí)行文件. 例如,下面的命令將在當(dāng)前目錄下產(chǎn)生一個(gè)叫 a.out 的文件:gcc test.c你能用 -o 編譯選項(xiàng)來(lái)為將產(chǎn)生的可執(zhí)行文件指定一個(gè)文件名來(lái)代替 a.out.例如, 將一個(gè)叫 count.c 的 C 程序編譯為名叫 count 的可執(zhí)行文件, 你將輸 入下面的命令:gcc -o count count.c注意: 當(dāng)你使用 -o 選項(xiàng)時(shí), -o 后面必須跟一個(gè)文件名.-c 只編譯并生成目標(biāo)文件。 gcc and g+分別是 gnu 的 c & c+編譯器 gcc/g+在執(zhí)行編譯工作的時(shí)候,總共需要 4 步 1. 預(yù)

3、處理,生成.i 的文件 預(yù)處理器 cpp2. 將預(yù)處理后的文件不轉(zhuǎn)換成匯編語(yǔ)言,生成文件.s編譯器 egcs3. 有匯編變?yōu)槟繕?biāo)代碼(機(jī)器代碼)生 成.o 的文件匯編器 as4. 連接目標(biāo)代碼,生成可執(zhí)行程序鏈接器 ld 參數(shù)詳解-x language filename設(shè)定文件所使用的語(yǔ)言,使后綴名無(wú)效,對(duì)以后的多個(gè)有效.也就是根據(jù)約定 C 語(yǔ)言的后 綴名稱是.c 的,而 C+的 后綴名是.C 或者.cpp,如果你很個(gè)性,決定你的 C 代碼文件的后綴 名是.pig 哈哈,那你就要用這個(gè)參數(shù),這個(gè)參數(shù)對(duì)他后面的文件名都起作用, 除非到了 下一個(gè)參數(shù)的使用。 可以使用的參數(shù)嗎有下面的這些 c, o

4、bjective-c, c-header, c+, cpp-output, assembler, and assembler-with-cpp.看到英文,應(yīng)該可以理解的。例子用法:gcc -x c hello.pig-x none filename關(guān)掉上一個(gè)選項(xiàng),也就是讓 gcc 根據(jù)文件名后綴,自動(dòng)識(shí)別 文件類(lèi)型例子用法:gcc -x c hello.pig -x none hello2.c-c只激活預(yù)處理,編譯,和匯編,也就是他只把程序做成 obj 文件例子用法:gcc -c hello.c他將生成.o 的 obj 文件 -S只激活預(yù)處理和編譯,就是指把文件編譯成為匯編代碼。例子用法 gc

5、c -S hello.c他將生成.s 的匯編代碼,你可以用文本編輯器察看 -E只激活預(yù)處理,這個(gè)不生成文 件,你需要把它重定向到一個(gè)輸出文件里面. 例子用法:gcc -E hello.c pianoapan.txt gcc -E hello.c | more慢慢看吧,一個(gè) hello word 也要與處理成 800 行的代碼 -o制定目標(biāo)名稱,缺省的時(shí)候,gcc 編譯出來(lái)的文件是 a.out,很難聽(tīng),如果你和我有同感 ,改掉它,哈哈例子用 法 gcc -o hello.exe hello.c (哦,windows 用習(xí)慣了) gcc -o hello.asm -S hello.c-pipe使用

6、管道代替編譯中臨時(shí)文件,在使用非 gnu 匯編工具的時(shí)候,可能有些問(wèn)題 gcc -pipe -o hello.exe hello.c-ansi關(guān)閉 gnu c 中與 ansi c 不兼容的特性,激活 ansi c 的專(zhuān)有特性(包括禁止一些 asm inline typeof 關(guān)鍵字,以及 UNIX,vax 等預(yù)處理宏,-fno-asm此選項(xiàng)實(shí)現(xiàn) ansi 選項(xiàng)的功能的一部分,它禁止將 asm,inline 和 typeof 用作關(guān)鍵字。 -fno-strict-prototype只對(duì) g+起作用,使用這個(gè)選項(xiàng),g+將對(duì)不帶參數(shù)的函數(shù),都認(rèn)為是沒(méi)有顯式的對(duì)參數(shù) 的個(gè)數(shù)和類(lèi)型說(shuō)明,而不是沒(méi)有參數(shù).

7、而 gcc 無(wú)論是否使用這個(gè)參數(shù),都將對(duì)沒(méi)有帶參數(shù)的函數(shù),認(rèn)為城沒(méi)有顯式說(shuō)明的類(lèi)型 -fthis-is-varialble就是向傳統(tǒng) c+看齊,可以使用 this 當(dāng)一般變量使用.-fcond-mismatch允許條件 表達(dá)式的第二和第三參數(shù)類(lèi)型不匹配,表達(dá)式的值將為 void 類(lèi)型 -funsigned-char-fno-signed-char-fsigned-char-fno-unsigned-char這四個(gè)參數(shù)是對(duì) char 類(lèi)型進(jìn)行設(shè)置,決定將 char 類(lèi)型設(shè)置成 unsigned char(前兩個(gè)參 數(shù))或者 signed char(后兩個(gè)參數(shù))-include file包含某個(gè)代

8、碼,簡(jiǎn)單來(lái)說(shuō),就是便以某個(gè)文件,需要另一個(gè)文件的時(shí)候,就可以用它設(shè) 定,功能就相當(dāng)于在代碼中使 用#include 例子用法:gcc hello.c -include /root/pianopan.h-imacros file將file 文件的宏,擴(kuò)展到gcc/g+的輸入文 件,宏定義本身并不出現(xiàn)在輸入文件中 -Dmacro相當(dāng)于 C 語(yǔ)言中的#define macro-Dmacro=defn相當(dāng)于 C 語(yǔ)言中的#define macro=defn-Umacro相當(dāng)于 C 語(yǔ)言中 的#undef macro-undef取消對(duì)任何非標(biāo)準(zhǔn)宏的定義 -Idir在你是 用#includefile的時(shí)候

9、,gcc/g+會(huì)先在當(dāng)前目錄查找你所制定的頭文件,如 果沒(méi)有找到,他回到缺省的頭文件目錄找,如果使 用-I 制定了目錄,他回先在你所制定的目錄查找,然后再按常規(guī)的順序去找.對(duì) 于#include,gcc/g+會(huì)到-I 制定的目錄查找,查找不到,然后將到系統(tǒng)的缺 省的頭文件目錄查找 -I-就是取消前一個(gè)參數(shù)的功能,所以一般在-Idir 之后使用-idirafter dir在-I 的目錄里面查找失敗,講到這個(gè)目錄里面查找.-iprefix prefix-iwithprefix dir一般一起使用,當(dāng)-I 的目錄查找失敗,會(huì)到 prefix+dir 下查找-nostdinc使 編譯器不再系統(tǒng)缺省的頭

10、文件目錄里面找頭文件,一般和-I 聯(lián)合使用,明確限定頭 文件的位置 -nostdin C+規(guī)定不在 g+指定的標(biāo)準(zhǔn)路經(jīng)中搜索,但仍在其他路徑中搜索,.此選項(xiàng)在創(chuàng) libg+庫(kù) 使用 -C在 預(yù)處理的時(shí)候,不刪除注釋信息,一般和-E 使用,有時(shí)候分析程序,用這 個(gè)很方便的-M生成文件關(guān)聯(lián)的信 息。包含目標(biāo)文件所依賴的所有源代碼你可以用 gcc-M hello.c來(lái)測(cè)試一下,很簡(jiǎn)單。-MM和上面的那個(gè)一樣,但是它將忽略由#include造成的依賴關(guān)系。-MD和-M 相同, 但是輸出將導(dǎo)入到.d 的文件里面-MMD和-MM 相同,但是輸出將導(dǎo)入到.d 的文件里面-Wa,option此選項(xiàng)傳遞opti

11、on 給匯編程序;如果option 中間有逗號(hào),就將option 分成多個(gè)選項(xiàng),然 后傳遞給會(huì)匯編程序 -Wl.option此選項(xiàng)傳遞option 給連接程序;如果option 中間有逗號(hào),就將option 分成多個(gè)選項(xiàng),然 后 傳遞給會(huì)連接程序.-llibrary制定編譯的時(shí)候使用的庫(kù)例子用法 gcc -lcurses hello.c使用 ncurses 庫(kù)編譯程序-Ldir制定編譯的時(shí)候,搜索庫(kù) 的路徑。比如你自己的庫(kù),可以用它制定目錄, 不然 編譯器將只在標(biāo)準(zhǔn)庫(kù)的目錄找。這個(gè) dir 就是目錄的名稱。 -O0-O1-O2-O3編譯器的優(yōu)化選項(xiàng)的 4 個(gè)級(jí)別,-O0 表示沒(méi)有優(yōu)化,-O1

12、為缺省值,-O3 優(yōu)化級(jí)別最高-g只是編譯器,在編譯的時(shí)候,產(chǎn)生調(diào)試信息。-gstabs此選 項(xiàng)以 stabs 格式聲稱調(diào)試信息,但是不包括 gdb 調(diào)試信息.-gstabs+此選項(xiàng)以 stabs 格式聲稱調(diào)試信 息,并且包含僅供 gdb 使用的額外調(diào)試信息.-ggdb此選項(xiàng)將盡可能的生成 gdb 的可以使用的調(diào)試信息.-static此選項(xiàng)將禁止使用動(dòng)態(tài)庫(kù),所以,編譯出來(lái)的東西,一般都很大,也不需要什么 動(dòng)態(tài)連接庫(kù),就可以運(yùn)行.-share此選項(xiàng)將盡量使用動(dòng)態(tài)庫(kù),所以生成文件比較小,但是需要系統(tǒng)由動(dòng)態(tài)庫(kù).-traditional試圖讓編譯器支持傳統(tǒng)的 C 語(yǔ)言 特性 參考資料-Linux/UN

13、IX 高級(jí)編程 編著.清華大學(xué)中科軟件技術(shù)出版-Gcc man pageChangeLog-2002-08-10ver 0.1 發(fā)布最初的文檔 -2002-08-11ver 0.11 修改文檔格式 -2002-08-12ver 0.12 加入了對(duì)靜態(tài)庫(kù),動(dòng)態(tài)庫(kù)的參數(shù) -2002-08-16ver 0.16 增加了gcc 編譯的 4 個(gè)階段的命令運(yùn)行 gcc/egcs*運(yùn)行 gcc/egcs*GCC 是 GNU 的 C和 C+ 編譯器。實(shí)際上,GCC 能夠編譯三種語(yǔ)言:C、C+ 和 Object C(C 語(yǔ)言的一種面向?qū)ο髷U(kuò)展)。利用 gcc 命令可同時(shí)編譯并連接 C 和 C+源 程序。 如果你

14、有兩個(gè)或少數(shù)幾個(gè) C 源文件,也可以方便地利用 GCC 編譯、連接并生成可 執(zhí)行文件。例如,假設(shè)你有兩個(gè)源文件 main.c 現(xiàn)在要編 譯生成一個(gè)計(jì)算階乘的程序。代碼:和 factorial.c兩個(gè)源文件, factorial.cint factorial (int n)if (n = 1) return 1;elsereturn factorial (n - 1) * n; main.c#include #includeint factorial (int n);int main (int argc, char *argv)int n;if (argc 2)printf (Usage: %s

15、 nn, argv 0); return -1;elsen = atoi (argv1);printf (Factorial of %d is %d.n, n, factorial (n);return 0;利用如下的命令可 編譯生成可執(zhí)行文件,并執(zhí)行程序: $ gcc -o factorial main.c factorial.c$ ./factorial 5Factorial of 5 is 120.GCC 可同時(shí)用來(lái)編譯 C 程序和 C+程序。一般來(lái)說(shuō),C 源文件的后綴 編譯器通過(guò)Linux 中, C 源文件的后綴名名來(lái)判斷是 C 程序還是 C+ 程序。在為 .c,而 C+ 源 文件的后

16、綴名為 .C 或 .cpp。但是,gcc 命令只能編譯 C+ 源文件,而不能自動(dòng)和 C+ 程序使用的庫(kù)連接。因此,通常使用 g+ 命令來(lái)完成 C+ 程序的編譯和連接,該程 序會(huì)自動(dòng)調(diào)用 gcc 實(shí)現(xiàn)編譯。 假設(shè)我們有一個(gè)如下的 C+ 源文件 (hello.C): #include void main (void)cout Hello, world! endl;則可以如下調(diào)用 g+ 命令編譯、連接并生成可執(zhí)行文件: $ g+ -o hello hello.C$ ./hello Hello, world!*gcc/egcs 的主要選項(xiàng)* gcc 命令的常用選項(xiàng) 選項(xiàng) 解釋 -ansi 只支持 ANSI 標(biāo)準(zhǔn)的 C 語(yǔ)法。這一選項(xiàng)將禁止 GNU C 的某些特色, 例如 asm 或 typeof 關(guān)鍵詞。 -c 只編譯并生成目標(biāo)文件。 -DMACRO 以字符串“1”定義 MACRO 宏。 -DMACRO=DEFN 以字符串“DEFN”定義 MACRO 宏。 -E 只運(yùn)行 C 預(yù)編譯器。 -g 生成調(diào)試信息。GNU 調(diào)試器可利用該信息。-IDIRECTORY 指定額外的頭文件搜索路徑 DIRECTORY。 -LDIRECTORY 指定額外的函數(shù)庫(kù)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論