gcc編譯指令詳解

2021-06-22 01:56:22 字數 1109 閱讀 9613

一 gcc編譯流程

1.預處理階段

gcc -e hello.c -o hello.i

說明:(1)-o 《輸出檔案》 :指定輸出檔案

(2)-e 只執行編譯預處理

該階段是讀取標頭檔案的內容,並把相應的內容插入到源**,預處理結束後停止編譯過程。

cat hello.i|less 檢視

2.編譯階段

gcc -s hello.i -o hello.s

cat hello.s

說明:(1) -s 將**轉換為彙編

該階段首先檢查**的規範性,是否有語法錯誤,檢查無誤後,將其翻譯為彙編**。

3.彙編階段

gcc -c hello.s -o hello.o

該階段彙編器將彙編**編譯成機器語言指令。

4.鏈結階段

gcc hello.o -o hello1

ls -l hello1

file hello1

gcc -static hello.o -o hello2

ls -l hello2

file hello2

5.gcc其它指令形式

(1) gcc -wall hello.c

2)顯示警告資訊

gcc -wall hello.c -o hello

說明:指定可執行檔名為hello。

(2)gcc -c -wall a.c b.c c.c d.c

說明:將多個原始檔生成對應的物件檔案。

(3)多個原始檔生成可執行檔案

gcc -wall hellomain.c sayhello.c -o hello

(4)鏈結gcc非預設庫函式

在編譯的時候要加入「-l庫的首字母」來進行編譯。

進一步說明:編譯程式時,得到undefined reference to '***x'的錯誤提示。

那一定時缺少某個庫,用-l引數將庫加入。linux的庫命名是一致的,一般為lib***.so, lib***.a, lib***.la, 那麼鏈結某個庫就用-l***, 去掉頭lib和字尾。

gcc hello.c -lm -o hello

程式中用到math.h,該檔案不是gcc預設的標頭檔案。

gcc編譯詳解

test.i test.s test.o include int main void 預編譯過程 處理巨集定義和include,並做語法檢查 gcc e test.c o test.i cat test.c wc l 6cat test.i wc l 855 編譯過程 生成彙編 gcc s test...

gcc編譯詳解

這些常用的 gcc g 命令列引數,你都知道麼?1.gcc e source file.c e,只執行到預編譯。直接輸出預編譯結果。2.gcc s source file.c s,只執行到源 到彙編 的轉換,輸出彙編 3.gcc c source file.c c,只執行到編譯,輸出目標檔案。4.g...

gcc常見的編譯指令

gcc 編譯器常用的命令列引數一覽 這些常用的 gcc g 命令列引數,你都知道麼?1.gcc e source file.c e,只執行到預編譯。直接輸出預編譯結果。2.gcc s source file.c s,只執行到源 到彙編 的轉換,輸出彙編 3.gcc c source file.c c...