常見C++筆試面試題整理 [gcc編譯的四個步驟]
常見C++筆試面試題整理 [gcc編譯的四個步驟]
資料來源: https://mp.weixin.qq.com/s/hONnHSkR8Qk4doIK0aYHiQ
以最簡單的hello.c為例子
一步到位:
gcc hello.c [gcc -o main *.c] ~ http://www.tutorialspoint.com/compile_c_online.php
這條命令隱含執行了
(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首先要檢查代碼的規範性、是否有語法錯誤等,以確定代碼的實際要做的工作,在檢查無誤後, 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鏈接成最終可執行文件hello。
運行該可執行文件,出現正確的結果如下。
>>> ./hello
Hello World!