>>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去除符...