gcc編譯c語言程式

2021-09-07 17:00:53 字數 1541 閱讀 7191

編譯:當前源**編譯成二進位制目標檔案(.obj檔案)

乙個現代編譯器的主要工作流程如下:

源程式(source code)→預處理器(preprocessor)→編譯器(compiler)→匯程式設計序(assembler)→目標程式(object code)→聯結器(鏈結器,linker)→可執行程式(executables)

執行過程 雖然我們稱gcc是c語言的編譯器,但使用gcc由c語言源**檔案生成可執行檔案的過程不僅僅是編譯的過程,而是要經歷四個相互關聯的步驟∶

1.預處理(也稱預編譯,preprocessing):命令gcc首先呼叫cpp進行預處理,在預處理過程中,對源**檔案中的檔案包含(include)、預編譯語句(如巨集定義define等)進行分析。

2.編譯(compilation):接著呼叫cc1進行編譯,這個階段根據輸入檔案生成以.o為字尾的目標檔案。

3.彙編(assembly):彙編過程是針對組合語言的步驟,呼叫as進行工作,一般來講,.s為字尾的組合語言源**檔案、.s為字尾的組合語言檔案經過預編譯和彙編之後都生成以.o為字尾的目標檔案。

4.鏈結(linking):當所有的目標檔案都生成之後,gcc就呼叫ld來完成最後的關鍵性工作,這個階段就是連線。在連線階段,所有的目標檔案被安排在可執行程式中的恰當的位置,同時,該程式所呼叫到 的庫函式也從各自所在的檔案庫中連到合適的地方。

例項:

1.編寫.c檔案如下:

#include

int main()

printf("this is my first c program in ubuntu");

return 0;

2.預編譯過程:

gcc -e ./hello.c -o hello.i //.i 為字尾的檔案,是已經預處理過的c源**檔案,可以省略這一步。

cat hellp.c | wc -l //檢視hello.c檔案內容的行數。

cat hellp.i | wc -l //檢視hello.i檔案內容的行數。

3.彙編過程:

gcc -s hello.i -o hello.s //.s為字尾的檔案,是組合語言源**檔案;可以省略這一步。

4.編譯過程

gcc -c ./hello.c //在當前資料夾下生成hello.o .o為字尾的檔案,是編譯後的目標檔案;

gcc -c hello.c -o hello.o //在當前資料夾下生成hello.o

gcc hello.o -o hello

6.直接把hello檔案拖動到終端即可執行。

用g++編譯c++源程式

用g++編譯c++源程式和c語言類似,可將gcc改為g++逐個嘗試。以下只提供一些簡單介紹:

-e preprocess only; do not compile, assemble or link

-s compile only; do not assemble or link

-c compile and assemble, but do not link

-o place the output into

gcc編譯C 程式

單個原始檔生成可執行程式 下面是乙個儲存在檔案 helloworld.cpp 中乙個簡單的 c 程式的 helloworld.cpp include int main int argc,char argv 程式使用定義在標頭檔案 iostream 中的 cout,向標準輸出寫入乙個簡單的字串。該 可...

gcc編譯C 程式

單個原始檔生成可執行程式 下面是乙個儲存在檔案 helloworld.cpp 中乙個簡單的 c 程式的 helloworld.cpp include int main int argc,char argv 程式使用定義在標頭檔案 iostream 中的 cout,向標準輸出寫入乙個簡單的字串。該 可...

gcc編譯C 程式

單個原始檔生成可執行程式 下面是乙個儲存在檔案 helloworld.cpp 中乙個簡單的 c 程式的 helloworld.cpp include int main int argc,char ar std cout hello,world std endl return 0 程式使用定義在標頭檔...