gcc簡介及編譯過程

2021-08-03 20:50:34 字數 1440 閱讀 9230

(1)編譯器 gcc 簡介  

linux系統下的 gcc(gnu c compiler)是gnu推出的功能強大、效能優越的多

平台編譯器,它是gnu的代表作品之一,gcc是可以在多種硬體平台上編譯出可

執行檔案的超級編譯器,其執行效率比一般的編譯器要高出20%-30%。編譯器能

將c、c++語言源程式、組合語言源程式和目標程式編譯、鏈結成可執行檔案如

果沒有給出可執行檔案的名字,gcc將生成乙個預設名為a.out的可執行檔案。

在linux系統中,可執行檔案沒有統一的字尾,系統從檔案的屬性來區分可執行檔案和不可執行檔案,而gcc則通過字尾來區別輸入檔案的型別。                                 

(2)gcc 的編譯過程

原始檔(.c .h)-> 預處理->編譯->彙編->(靜態庫,動態庫)鏈結->可執行檔案

預處理(preprocessing):產生程式中的警告

主要處理原始檔中,以'#'開頭的語句,如#include  #ifdef  #define等,該階段會產生乙個中間檔案 (*.i)。

命令 gcc -e -o zmx.i zmx.c。

編譯階段(compilation): 產生程式中的錯誤   

預處理完成後,gcc首先檢查**的規範性,以及是否有語法錯誤等。檢查無誤後,開始把**翻譯成組合語言。

命令:gcc -s -o zmx.s zmx.i 

彙編階段(assembly):產生目標檔案.o ,是不可執行的二進位制檔案

在彙編階段,將輸入的彙編檔案 *.s,轉換成目標檔案 *.o, *.o 已經是二進位制檔案,即 0 和 1的機器語言,但是,它不是可執行的二進位制檔案。

命令:gcc -c -o zmx.o zmx.s 

鏈結階段(linking): 將各個函式生成的.o目標檔案鏈結生成乙個工程檔案。

前面的過程知識驗證該函式的正確與否,只有在連線階段,將各個函式聯合起來。

類如函式中只有乙個函式且不是主函式,沒有語法錯誤,預處理和編譯都不會產生錯誤,因為都只是把他當作普通函式來處理,當執行到鏈結這一步時,將程式整合,必須要有程式的入口和出口,即主函式,所以此時會產生報錯。

彙編之後,進入鏈結。在鏈結階段,通過鏈結各種靜態庫和動態庫,得到可執行檔案。

命令:gcc -o star zmx.o 

gcc 常見的用法

gcc -o

生成指定的輸出檔案

gcc -v

查詢gcc版本資訊

gcc -g

生成除錯資訊,gdb偵錯程式可以利用該資訊

gcc -i

指定額外的標頭檔案搜尋路徑

gcc -l

指定額外的函式庫搜尋路徑

gcc -static

靜態鏈結庫,預設都是動態鏈結庫

gcc -w

不生成任何警告資訊

gcc -wall

生成所有警告資訊

GCC 的編譯過程及編譯工具

nasm的安裝與使用 總結本文講解了gcc的編譯過程,預處理 編譯 彙編和連線。還有編譯工具nasm的使用。include intmain void 預處理語句 gcc e hello.c o hello.ihello.i檔案內容 gcc s hello.i o hello.shello.s檔案內容...

GCC編譯過程及基本用法

gcc是有gnu開發的程式語言編譯器。使用gcc編譯器,目的大多都是將源 編譯成可執行檔案。但是在這看似簡單的一步,實則經過了預處理 preprocessing 編譯 compilation 彙編 assembly 和鏈結 linking 四個步驟 步驟命令引數 預處理 e 編譯 s 彙編 c 1 ...

gcc編譯過程及相關引數

1.gcc編譯過程 2.gcc編譯引數 i 指定包含的標頭檔案路徑,如 i include d 指定編譯過程中的全域性巨集,如 d macro debug o 需不需要優化我們的程式,範圍0 3,0表示不優化,3表示最高優化 wall 程式編譯過程中輸出警告資訊 g 在生成的程式中新增除錯資訊 l ...