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

GCC/G++ 入門到進階:編譯選項、文件類型與實戰技巧

     編輯:關於C語言

GCC 簡介

GNU Compiler Collection (GCC) 支持 C、C++、Objective-C、Fortran 等語言,跨平台、開源、優化能力強(-O2/-O3 通常比商業編譯器快 20-30%)。Linux 系統預裝,Windows 可用 MinGW-w64 或 MSYS2 獲取。

文件後綴識別規則

Linux 可執行文件無固定後綴,由文件權限 x 位決定。

編譯四階段與常用選項

# 1. 預處理 (-E)
gcc -E hello.c -o hello.i

# 2. 編譯為匯編 (-S)
gcc -S hello.i -o hello.s

# 3. 匯編為目標文件 (-c)
gcc -c hello.s -o hello.o

# 4. 鏈接生成可執行文件
gcc hello.o -o hello
# 一步到位
gcc hello.c -o hello
後綴含義
.cC 源文件
.cpp/.cc/.cxx/.CC++ 源文件
.h/.hpp頭文件
.i預處理後的 C 源文件
.ii預處理後的 C++ 源文件
.s/.S匯編源文件(.S 經預處理)
.o目標文件
.a/.so靜態庫 / 動態庫

頭文件搜索機制

  • #include <header.h>:僅搜索系統默認路徑(/usr/include 等)及 -I 指定路徑。
  • #include "header.h":先搜索當前文件所在目錄,再搜索 -I 路徑,最後系統路徑。

庫鏈接順序陷阱

鏈接器按命令行順序解析符號,依賴庫必須放在被依賴者之後:

# 錯誤:undefined reference
gcc -lmylib main.o

# 正確:main.o 先出現,符號需求先產生
gcc main.o -lmylib

實戰範例:多文件專案構建

# 編譯階段
g++ -std=c++17 -Wall -O2 -I./include -c src/main.cpp -o build/main.o
g++ -std=c++17 -Wall -O2 -I./include -c src/util.cpp -o build/util.o

# 鏈接階段
g++ build/main.o build/util.o -L./lib -lmylib -o bin/app

環境變量補充

選項作用推薦場景
-o file指定輸出文件名必加
-c僅編譯不鏈接,產生 .o多文件專案分別編譯
-g生成調試符號開發/調試階段必加
-O2 / -O3優化等級發布構建
-Wall -Wextra開啟大部分警告全過程必加
-std=c++17指定語言標準現代 C++ 專案
-I/path添加頭文件搜索路徑第三方庫
-L/path添加庫文件搜索路徑第三方庫
-lname鏈接 libname.a/.so如 -lpthread
-static靜態鏈接部署無依賴環境
-DNAME=VALUE預定義宏條件編譯

總結

掌握「四階段編譯、關鍵選項、搜索路徑、鏈接順序」四大核心,即可駕馭 GCC 完成從單文件到大型專案的構建任務。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
變量作用
C_INCLUDE_PATHC 頭文件搜索路徑(冒號分隔)
CPLUS_INCLUDE_PATHC++ 頭文件搜索路徑
LIBRARY_PATH靜態庫搜索路徑(編譯時)
LD_LIBRARY_PATH動態庫搜索路徑(運行時)