以最簡單的hello.c為例子
一步到位:gcc hello.c
這條命令隱含執(zhí)行了
(1)預處理
(2)編譯
(3)匯編
(4)鏈接
這里未指定輸出文件,默認輸出為a.out
gcc編譯C源碼有四個步驟:
預處理 ----> 編譯 ----> 匯編 ----> 鏈接
現在我們就用gcc的命令選項來逐個剖析gcc過程。
1)預處理(Pre-processing)
在該階段晌端,編譯器將C源代碼中的包含的頭文件如stdio.h添加進來
參數:”-E”
用法:gcc -E hello.c -o hello.i
作用:將hello.c預處理輸出hello.i文件戴已。
2)編譯(Compiling)
第二步進行的是編譯階段斤讥,在這個階段中急侥,gcc首先要檢查代碼的規(guī)范性执赡、是否有語法錯誤等尾抑,以確定代碼的實際要做的工作歇父,在檢查無誤后蒂培,gcc把代碼翻譯成匯編語言。
參數:”-S”
用法:gcc –S hello.i –o hello.s
作用:將預處理輸出文件hello.i匯編成hello.s文件榜苫。
3)匯編(Assembling)
匯編階段是把編譯階段生成的”.s”文件轉成二進制目標代碼“.o”文件
參數:“-c”
用法:gcc –c hello.s –o hello.o
作用:將匯編輸出文件hello.s編譯輸出hello.o文件护戳。
4)鏈接(Link)
在成功編譯之后,就進入了鏈接階段垂睬。
用法:gcc hello.o –o hello
作用:將編譯輸出文件hello.o鏈接成最終可執(zhí)行文件hello媳荒。
運行該可執(zhí)行文件,出現正確的結果如下驹饺。
[root@localhost gcc]# ./hello
Hello World!