gcc編譯程式的流程

2022-03-17 20:27:46 字數 2431 閱讀 5298

>>gcc編譯器

gcc編譯器:(c語言的編譯器gcc/g++)

gcc編譯程式的流程

原始檔(.c)——>預處理

(.i)——>

編譯——>

彙編(.s)——>

鏈結(.o)——>可執行檔案

(filename.c)(預處理器)(編譯器)(彙編器) (聯結器)

(excutefile)

編譯執行五部曲:(一般就三步:對

c檔案直接編譯後直接生成可執行檔案後執行

gcc bcard.c    gcc -o bcard bcard.c     ./bcard

-c,只編譯,不連線成為可執行檔案,編譯器只是由輸入的.c等源**檔案生成

.o為字尾的目標檔案,通常用於編譯不包含主程式的子程式檔案。

-ooutput_filename,確定輸出檔案的名稱為

output_filename

,同時這個名稱不能和原始檔同名。如果不給出這個選項,

gcc就給出缺省的可執行檔案

a.out

-g,產生符號除錯工具

(gnu

的gdb)

所必要的符號資訊,要想對源**進行除錯,我們就必須加入這個選項。

-o,對程式進行優化編譯、連線,採用這個選項,整個源**會在編譯、連線過程中進行優化處理,這樣產生的可執行檔案的執行效率可以提高,但是,編譯、連線的速度就相應地要慢一些。

-o2,比-o更好的優化編譯、連線,當然整個編譯、連線過程會更慢。

1,  c語言

(.c)-->預處理檔案

(標頭檔案和巨集定義處理檔案,很大

)(.i)

語句:$ gcc-ebcard.c -o bcard.i

2,  預處理檔案(.i)-->彙編檔案

(.s)

編譯:該選項只進行編譯而不進行彙編,結果生成彙編**。

語句:$ gcc-sbcard.i -o bcard.s

3,  彙編檔案

(.s)-->目標二進位制檔案

(.o)

彙編:把組合語言翻譯成機器語言的過程稱為彙編。

語句:$ gcc-cbcard.s -o bcard.o

4,  目標二進位制檔案(.o)-->可執行檔案(檔名)

.o檔案中並沒有函式的實現,必須經過鏈結才能將函式的實現載入到.o檔案中,最終生成二進位制的可執行檔案

(改名)語句

:$ gcc bcard.o -o bcard

5,  執行該程式

(./檔名)

語句:$ ./bcard

GCC編譯程式

gcc gnu compiler collection 是linux下最主要的一種編譯工具。gcc編譯格式 gcc 選項 源檔名 選項 目標檔名 採用預設得方式編譯原始檔,系統會生成a.out可執行檔案 採用顯式編譯成目標檔案,在編譯成可執行檔案 gcc c hello.c 生成hello.o gc...

減小Gcc編譯程式的體積

眾所周知,gcc編譯的原始程式一般很大,其實有幾種方法能大大減小目標 的體積,一般有以下幾種方法。1 禁用除錯資訊 release編譯時不要加上 g開關。2 使用 os編譯程式。不要使用 funroll loops等可以加速程式執行但是會大大增加目標 體積的開關。3 編譯後的程式使用strip去除符...

減小Gcc編譯程式的體積

眾所周知,gcc編譯的原始程式一般很大,其實有幾種方法能大大減小目標 的體積,一般有以下幾種方法。1 禁用除錯資訊 release編譯時不要加上 g開關。2 使用 os編譯程式。不要使用 funroll loops等可以加速程式執行但是會大大增加目標 體積的開關。3 編譯後的程式使用strip去除符...