gcc編譯系統

2021-08-03 10:14:16 字數 2577 閱讀 1273

常用檔名字尾及其表示的檔案型別如下表:

檔名字尾

檔案型別

.cc 原始檔

.i預處理後的 c 原始檔

.ii預處理後的 c++ 原始檔

.hc 或 c++ 標頭檔案

.c .cc .cp .cpp .c++ .cxx

c++ 原始檔

.s匯程式設計序檔案

.s必須預處理的匯程式設計序檔案

.o目標檔案

.a靜態鏈結庫

.so動態鏈結庫

預處理之後原始碼中不再包含任何預處理語句。例如:

gcc預處理階段可以生成.i的檔案,通過選項-e可以使編譯器在預處理結束時就停止編譯。 例如:

gcc -e -o hello.i hello.c
這一階段,編譯器對原始碼進行詞法分析、語法分析、優化等操作,最後生成彙編**。這是整個過程中最重要的一步,因此也常把整個過程稱為編譯

可以通過選項-s使 gcc 在進行完編譯後停止,生成.s的匯程式設計序。例如:

gcc -s -o hello.s hello.c
這一階段使用彙編器對彙編**進行處理,生成機器語言**,儲存在字尾為.o的目標檔案中。當程式由多個**檔案構成時,每個檔案都要先完成彙編工作,生成 .o 目標檔案後,才能進入下一步的鏈結工作。

gcc -c -o hello.o hello.c
經過彙編以後的機器**還不能直接執行。為了使作業系統能夠正確載入可執行檔案,檔案中必須包含固定格式的資訊頭,還必須與系統提供的啟動**鏈結起來才能正常執行,這些工作都是由鏈結器來完成的。例如:

gcc -o hello hello.c
gcc [-wall]

[-o1..3]

[-g]

[-o name] file...

使用舉例:

按照選項作用所對應的編譯階段,可將 gcc 的選項分為四組:預處理選項、編譯選項、優化選項和連線選項

選項格式

功能-c

在預處理後的輸出中保留原始檔中的注釋

-d name

預定義乙個巨集 name,而且其值為 1

-d name=definition

預定義乙個巨集 name,並指定其值為 definition 所指定的值。其作用等價於在原始檔中使用巨集定義指令:#define name definition。但 -d 選項比巨集定義指令的優先順序高,它可以覆蓋原始檔中的定義

-u name

取消先前對 name 的任何定義,不管是內建的,還是由 -d 選項提供的

-i dir

指定搜尋標頭檔案的路徑 dir。先在指定的路徑中搜尋要包含的標頭檔案,若找不到,則在標準路徑(/usr/include, /usr/lib及當前工作目錄)上搜尋

-e只對指定的原始檔進行預處理,不做編譯,生成的結果送到標準輸出

選項格式

功能-c

只生成目標檔案,不進行連線。用於對原始檔的分別編譯

-s只進行編譯,不做彙編,生成彙編**檔案格式,其名與原始檔相同,但擴充套件名為 .s

-o file

將輸出放在檔案file中。如果未使用該選項,則可執行檔案放在 a.out 中

-g指示編譯程式在目標**中加入供除錯程式 gdb 使用的附加資訊

-v在標準出錯輸出上顯示編譯階段所執行的命令,即編譯驅動程式及預處理程式的版本號

優化分為對中間**的優化和針對目標碼生成的優化。

選項格式

功能object-file-name

不以專用字尾結尾的檔名就認為是目標檔名或庫名。連線程式可以根據檔案內容來區分目標檔案和庫

-c -s -e

如果使用其中任何乙個選項,那麼都不執行連線程式,而且目標檔名不應該用做引數

-llibrary

連線時搜尋由 library 命名的庫。連線程式按照在命令列上給定的順序搜尋和處理庫及目標檔案。實際的庫名是 liblibrary.a

-static

在支援動態連線的系統中,它強制使用靜態鏈結庫,而阻止連線動態庫;而在其他系統中不起作用.把指定的目錄 dir 加到連線程式搜尋庫檔案的路徑表中,即在搜尋-l後面

-l dir

列舉的庫檔案時,首先到 dir 下搜尋,找不到再到標準位置下搜尋

-bprefix

該選項規定在什麼地方查詢可執行檔案、庫檔案、包含檔案和編譯程式本身資料檔案

-o file

指定連線程式最後生成的可執行檔名稱為 file,不是預設的 a.out

gcc編譯過程

本文對gcc編譯器如何工作做乙個概要描述.更為詳細的資訊請參考編譯器手冊。當我們進行編譯的時候,要使用一系列的工具,我們稱之為工具鏈.其中包括 預處理器cpp,編譯器前端gcc g 彙編器as,聯結器ld.乙個編譯過程包括下面幾個階段 1 預處理。預處理器cpp將對原始檔中的巨集進行展開。2 編譯。...

gcc編譯過程

當我們進行編譯的時候,要使用一系列的工具,我們稱之為工具鏈.其中包括 預處理器cpp,編譯器前端gcc g 彙編器as,聯結器ld.乙個編譯過程包括下面幾個階段 1 預處理。預處理器cpp將對原始檔中的巨集進行展開。2 編譯。gcc將c檔案編譯成彙編檔案。3 彙編。as將彙編檔案編譯成機器碼。4 連...

GCC編譯選項

gcc g 在執行編譯工作的時候,總共需要4步 1.預處理,生成.i的檔案 預處理器cpp 2.將預處理後的檔案不轉換成組合語言,生成檔案.s 編譯器egcs 3.有彙編變為目標 機器 生成.o的檔案 彙編器as 4.連線目標 生成可執行程式 鏈結器ld 引數詳解 c 只啟用預處理,編譯,和彙編,也...