GCC


GCC

GNU Compiler Collection, GNU 編譯器套件

是由 GNU 開發的 編程語言譯器

GNU編譯器套件, 包括 C, C++, Objective-C, Fortran, Java, Ada 和 Go語言前端, 也包括了 這些語言的庫(如 libstdc++, libgc等)

GCC的初衷是為GNU操作系統專門編寫的一款 編譯器, GNU系統是徹底的 自由軟件,

GCC是以 GPL許可證所發行的 自由軟件, 也是 GNU計划的 關鍵部分,

GCC的初衷是為 GNU操作系統專門編寫的一款 編譯器, 現已被大多數 類Unix操作系統(如 Linux, BSD, MacOS X等) 采納為 標准的 編譯器, 甚至在 微軟的 Windows上也可以使用GCC,

GCC支持多種 計算機體系結構芯片, 如x86, ARM, MIPS等, 並已被移植到其他多種硬件平台

GCC原名為 GNU C語言編譯器(GNU C Complier), 只能處理C語言.

但其很快擴展, 變得可處理C++, 后來又夠支持多種編程語言, 如Fortran, Pascal, Objective-C, Java, Ada, Go以及各類處理架構上的 匯編語言等,

所以改名為 GNU編譯器套件(GNU Complier Collection)

1. 結構

GCC的外部接口長得像 一個標准的 Unix編譯器.

使用者 在 命令列下 鍵入 gcc之程序名, 以及一些命令參數, 以便決定每個輸入檔案使用的個別語言編譯器, 並為 輸出程序碼 使用適合此硬件平台的 組合語言編譯器,

並且選擇性第執行 連接器 以 制造 可執行的程序

每個語言編譯器都是 獨立程序, 此程序可處理輸入的原始碼, 並輸出組合語言碼.

全部的 語言編譯器 都擁有 都擁有共通的 中介架構: 一個前端解析符合此語言的原始碼, 並產生 一抽象語法樹, 以及 一 翻譯此語法樹 成為 GCC的暫存器轉換語言(RTL)的 后端. 編譯器最佳化 與 靜態程序碼解析技術(例如FORTIFY_SOURCE, 一個試圖發現 緩沖區溢位(buffer overflow)的 編譯器), 在此階段應用於 程序碼上. 最后, 適用於 此硬件架構的 組合語言程序碼 以及 Jack Davidson 與 Chris Fraser發明的 算法產出

幾乎全部的 GCC 都由 C寫成, 除了 Ada前端大部分以Ada寫成

2. 基本用法

在使用 GCC編譯器的時候, 我們必須給出一系列必要的 調用參數 和 文件名稱. GCC編譯器 的 調用參數 大約有100多個, 這里只介紹其中 最基本, 最常用的參數, 具體可參考 GCC Manual

GCC最基本的語法是, gcc [options] [filename]

其中 options 就是 編譯器所需要的參數, filename 給出相關的 文件名稱

執行過程

雖然我們稱 GCC是 C語言的編譯器, 但使用gcc由 C語言 源代碼文件 生成 可執行文件的過程不僅僅是 編譯的過程, 而是要經歷四個相互關聯的步驟,

預處理(也稱 預編譯, Preprocessing)

編譯(Compilation)

匯編(Assembly)

鏈接(Linking)

命令gcc首先調用cpp進行預處理, 在預處理過程中, 對源代碼文件中的 文件包含(include), 預編譯語句(如 宏定義 define等) 進行分析,

接着調用 gcc 進行編譯, 這個階段根據 輸入文件 生成 以 .i 為后綴的 目標文件,

匯編過程 是針對 匯編語言的步驟, 調用 as 進行工作, 一般來講, .S后綴的匯編語言 源代碼文件 和 匯編, .s為后綴的匯編語言文件 經過 預匯編 和 匯編之后 都生成以 .o為后綴的目標文件,

當所有的目標文件 都生成之后, gcc就調用 ld 來完成最后的 關鍵性工作, 這個階段就是 連接

在連接階段, 所有的 目標文件 被 安排在 可執行程序中 的 恰當文職, 同時, 該程序所調用的 庫函數 也從各自所在的 檔案庫中 連到 合適的 地方

3. 安裝

https://gcc.gnu.org/install/


參考鏈接

https://baike.baidu.com/item/gcc/17570

https://gcc.gnu.org/

https://gcc.gnu.org/onlinedocs/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM