常見C++筆試面試題整理 [gcc編譯的四個步驟]

常見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!

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *