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

GCC 編譯全過程詳解:從源碼到可執行文件

     編輯:關於C語言

一條命令背後的四步

gcc demo.c -o demo 實際上依次執行:預處理 → 編譯 → 匯編 → 鏈接。

1. 預處理 (-E)

gcc -E demo.c -o demo.i
  • 處理 #include、#define、#ifdef 等指令。
  • 展開宏、插入頭文件內容、刪除註釋。
  • 輸出 .i 文件(純 C 代碼,無預處理指令)。

2. 編譯 (-S)

gcc -S demo.i -o demo.s
  • 將預處理後的 C 代碼翻譯為目標平台的匯編代碼(.s 文件)。
  • 此階段進行詞法分析、語法分析、語義分析、中間代碼生成與優化。

3. 匯編 (-c)

gcc -c demo.s -o demo.o
  • 將匯編代碼翻譯為機器指令,生成目標文件(.o,ELF 格式)。
  • 目標文件包含符號表、重定位表、代碼段、數據段等。

4. 鏈接 (默認)

gcc demo.o -o demo
  • 將一或多個 .o 文件與庫文件(.a 靜態庫 / .so 動態庫)合併,解析符號引用,生成最終可執行文件。
  • 靜態鏈接:庫代碼複製進可執行文件;動態鏈接:僅記錄庫路徑與符號,運行時由動態鏈接器加載。

多文件編譯

gcc demo1.c demo2.c -o demo

等價於分別編譯生成 .o 再鏈接。大型項目建議使用 Makefile 或 CMake 管理。

常用選項速查

選項作用
-Wall開啟大多數警告
-O2優化等級 2(推薦發布)
-g生成調試信息
-std=c11指定 C 標準
-I/path添加頭文件搜索路徑
-L/path -lname添加庫搜索路徑並鏈接 libname.a/.so

實戰:查看中間產物

gcc -save-temps demo.c -o demo

會保留 demo.i、demo.s、demo.o,方便學習與調試。

總結

理解 GCC 四階段流程有助於診斷編譯錯誤、優化構建速度、排查鏈接問題。掌握中間產物查看技巧是 C 開發者的基本功。

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