網路城邦
上一篇 回創作列表 下一篇   字體:
Linux GCC 編譯過程 gcc主要參數
2007/01/04 13:47:10瀏覽4395|回應0|推薦1
 Linux GCC 編譯過程



首先,GCC使用預處理程式cpp,由它負責展開在原始檔案中定義的巨集,預編譯語句(如巨集定義define等、其中插入“#include”語句所包含的內容)進行分析向;接著,GCC會使用cclas將處理後的原始碼編譯成目標碼(組語);最後,GCC會調用鏈結程式ld,把生成的目標代碼鏈結成一可執行程式.





使用GCC編譯程序時,編譯過程可以被細分為四個階段:

預處理(Pre-Processing)

    -E
預處理完成後停止編譯 # gcc -E hello.c -o hello.cpp


編譯(Compiling)
彙編(Assembling)
鏈結(Linking)



        當所有的目標檔都生成之後,gcc就使用 ld來完成最後的關鍵性工作,這個階段就是連接。在連接階段,所有的目標檔被安排在可執行程式中的恰當的位置,同時,該程式所使用到的函數也從各自所在的函式庫中連到合適的地方。


gcc主要參數


-c
只編譯生成.o,不連接    
-o 定義輸出檔


-g gdb
調試用,在可執行程式中包含標準測試資訊

-IDIRNAME  DIRNAME加入到包含檔的搜索目錄中去

-L
DIRNAME
DIRNAME加入到庫檔檔的搜索目錄中去

-x 指定編譯步驟


-O,O1,O2,O3,O4,O5
優化級別

-w
關閉所有警告

-Wall
允許所有有用的警告

-DFOO=BAR
定義預處理宏FOO的值為BAR

-static 
靜態程式庫

-lFOO
動態函式庫,名為libFOO.o/libFOO.so(2.4/2.6)

-mcpu=CPU TYPE
針對不同CPU作不同的優化,比如-m386,-mpentiumpro



.c為尾碼的檔,C語言原始碼檔;

.a
為尾碼的檔,是由目標檔構成的檔案庫檔;

.C
.cc.cxx 為尾碼的文件,是C++原始碼文件;

.h
為尾碼的檔,是程式所包含的頭檔;

.i
為尾碼的檔,是已經預處理過的C原始碼檔;

.ii
為尾碼的檔,是已經預處理過的C++原始碼檔;

.m
為尾碼的文件,是Objective-C 原始碼文件;

.o
為尾碼的檔,是編譯後的目標檔;

.s
為尾碼的文件,是組合語言原始碼文件;經過預編譯跟編彙後產生.o的目標檔

.S
為尾碼的檔,是經過預編譯的組合語言源代碼檔。

( 知識學習隨堂筆記 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=keithmin&aid=631375