首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

GCC 編譯流程與參數詳解:從源碼到可執行文件

     編輯:關於C++

GCC 簡介

GCC (GNU Compiler Collection) 是功能強大的編譯器套件,支持 C、C++、Java、Ada、Fortran 等多種語言。日常開發中常用 gcc 編譯 C 程序,g++ 編譯 C++ 程序(實際調用同一後端)。

常用編譯參數

參數說明
-c只編譯不鏈接,生成目標文件 *.o
-S生成匯編代碼文件 *.s
-E只預處理,生成 *.i 文件(展開頭文件、宏替換等)
-g在可執行文件中嵌入調試信息,供 GDB 使用
-o <file>指定輸出文件名
-static靜態鏈接庫
-l<library>鏈接名為 library 的動態/靜態庫
-O2/-O3優化等級(-O2 推薦,-O3 激進優化)
-Wall開啟常見警告
-std=c++17指定語言標準

四階段編譯流程演示

以 hello.c 為例:

1. 預處理 -E

gcc -E hello.c -o hello.i

生成 hello.i,內容包含展開後的頭文件、宏定義、行號標記(# 1 "hello.c" 等)。

2. 編譯為匯編 -S

gcc -S hello.i -o hello.s

生成 hello.s,為 AT&T 語法匯編代碼(如 .section __TEXT,__text、_main:、pushq %rbp 等)。

3. 汇編為目標文件 -c

gcc -c hello.s -o hello.o

生成二進制目標文件 hello.o(ELF/Mach-O 格式),不可直接閱讀,需用 objdump 或反彙編工具查看。

4. 鏈接生成可執行文件

gcc hello.o -o hello

鏈接標準庫、啟動代碼等,產出最終可執行文件 hello(Linux/macOS)或 hello.exe(Windows)。

一步到位

gcc hello.c -o hello

內部自動完成上述四步,生成最終可執行文件。

執行與調試

./hello          # 運行
gdb ./hello      # 調試(需編譯時加 -g)

進階:查看中間產物的實際用途

  • .i:排查宏展開、頭文件包含順序、條件編譯問題。
  • .s:分析編譯器優化效果、指令選擇、寄存器分配、內聯展開等。
  • .o:用 nm 查看符號表、objdump -d 反彙編、size 查看段大小。

總結

理解 GCC 四階段編譯流程,能幫助開發者定位編譯錯誤、優化代碼、分析二進制體積、進行交叉編譯等高級任務。熟練掌握常用參數是 C/C++ 程序員的基本功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved