Linux編譯器——gcc
一、介紹
GCC(GNU Compiler Collection,GNU編譯器套件),是由 GNU 開發的程式語言編譯器。GCC原本作為GNU作業系統的官方編譯器,現已被大多數類Unix作業系統(如Linux、BSD、Mac OS X等)採納為標準的編譯器。
GCC 原名為 GNU C 語言編譯器(GNU C Compiler),因為它原本只能處理 C語言,後來經過不斷擴充套件能夠支援更多的程式語言,如 C++、Fortran、Pascal、Objective-C、Java、Ada、Go以及各類處理器架構上的組合語言等,所以改名為GNU編譯器套件。
二、基本用法
1、語法
gcc [選項] 原始檔 [選項] [目標檔案]
2、選項列表
選項 | 含義 |
---|---|
-E | 僅執行到預處理階段 |
-S | 執行到編譯階段,將C程式碼編譯成彙編程式碼 |
-c | 執行到彙編階段,將彙編程式碼編譯成為機器可識別的二進位制指令程式碼 |
-static | 對生成的檔案進行靜態連結 |
-share | 對生成的檔案進行動態連結,需要動態庫 |
-g | 生成除錯資訊 |
-O0 | 不進行優化處理 |
-O1,-O2,-O3 | 優化處理,且優化級別依次升高 |
-w | 不生成任何警告資訊 |
-Wall | 生成所有警告資訊 |
三、編譯過程
1、預處理
功能:巨集替換、標頭檔案展開、去註釋、條件編譯
例項:gcc -E test.c -o test.i
2、編譯
功能:語法分析及糾錯,無錯則將c程式碼編譯成彙編程式碼
例項:gcc -S test.c/test.i -o test.s
3、彙編
功能:將彙編程式碼編譯成為機器可識別的二進位制指令程式碼
例項:gcc -c test.s -o test.o
4、連結
功能:生成可執行檔案或庫檔案
(1)靜態連結
在編譯連結時,把庫檔案的程式碼全部加入到可執行檔案中,因此生成的檔案比較大,但在執行時也就不再需要庫檔案了。
靜態庫命名方式:libc.a :lib是字首,.a是字尾
例項:gcc -static test.o -o test
(2)動態連結
在編譯連結時,並沒有把庫檔案的程式碼加入到可執行檔案中,而是在程式執行時由連結檔案(記錄函式的地址資訊)載入庫,這樣可以節省系統的開銷,但是執行時依賴庫檔案。
動態庫命名方式:libc.so :lib是字首,.so是字尾
例項:gcc test.o -o test
要點:gcc預設生成的二進位制程式是動態連結的