gcc編譯操作

2021-08-29 12:30:13 字數 1022 閱讀 9634

一、說明

gnu/linux系統上常用的編譯工具是gcc。gcc實質上不是乙個單獨的程式,而是多個程式的集合,因此通常稱為工具鏈。

gcc hello.c -o hello //編譯後輸出hello檔案

./hello //執行hello

elf //二進位制檔案

二、程式的編譯過程

從c語言原始碼到可執行程式一般要經過以下的處理步驟:

預處理在這一階段,原始碼中的所有預處理語句得到處理

1、 #include語句所包含的檔案內容替換掉語句本身

2、所有已定義的巨集被展開

3、根據#if,#endif等語句的條件是否成立取捨相應的部分,如#if 0,#endif

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

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

編譯這一階段,編譯器對原始碼進行語法檢查、語法分析、優化等操作,最後生成彙編**。這是整個過程中最重要的一步,因此也常把整個過程稱為編譯。 可以通過選項-s使gcc在進行完編譯後停止,生成.s的匯程式設計序。例如:

gcc -s hello.i -o hello.s

彙編這一階段使用彙編器對彙編**進行處理,生成機器語言**,儲存在字尾為.o的目標檔案中。

當程式由多個**檔案構成時,每個檔案都要先完成彙編工作,生成.o目標檔案後,才能進入下一步的鏈結工作。

目標檔案已經是最終程式的某一部分了,只是在鏈結之前還不能執行。可以通過-c選項生成目標檔案:gcc -c hello.s -o hello.o

生成二進位制檔案

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

gcc hello1.o hello2.o hello3.o -o hello 鏈結要用的檔案或庫函式

gcc hello.c -o hello -i … //標頭檔案在上一級找

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 只啟用預處理,編譯,和彙編,也...