1. 程式人生 > >Linux編譯器——gcc

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.alib是字首,.a是字尾
     例項:gcc -static test.o -o test

(2)動態連結

     在編譯連結時,並沒有把庫檔案的程式碼加入到可執行檔案中,而是在程式執行時由連結檔案(記錄函式的地址資訊)載入庫,這樣可以節省系統的開銷,但是執行時依賴庫檔案。
     動態庫命名方式:libc.solib是字首,.so是字尾
     例項:gcc test.o -o test
     要點:gcc預設生成的二進位制程式是動態連結的