萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux GCC 編譯與使用進階:預編譯、目標碼、鏈接、警告、庫路徑、優化、靜態/動態鏈接全解析

本文為 GCC 使用進階補充,重點闡述庫依賴機制、優化選項權衡、靜態與動態鏈接差異及常用參數總表。

編譯三階段 (速查)

  1. gcc -E hello.c -o hello.i (預處理)
  2. gcc -c hello.i -o hello.o (目標碼)
  3. gcc hello.o -o hello (鏈接)

庫依賴與搜尋路徑

  • 預設頭文件:/usr/include/,庫文件:/usr/lib/
  • -I 添加頭文件路徑:gcc -o test test.c -I /home/xiaowp/include
  • -L 添加庫路徑:gcc -o test test.c -L /home/xiaowp/lib -lfoo (鏈接 libfoo.so)
  • -static 強制靜態鏈接:gcc -o test test.c -L /home/xiaowp/lib -static -lfoo

優化等級詳細差異

  • -O/-O1:基本優化 (線程跳轉、延遲退棧)
  • -O2:+ 指令排程等,最佳平衡點
  • -O3:+ 迴圈展開、處理器特化優化,碼體積可能增大

避免優化場景:開發期 (編譯慢)、嵌入式記憶體緊張 (碼膨脹)、調試期 (碼重組干擾斷點)。

加速編譯

gcc -pipe foo.c -o foo   # 管道替代暫存檔

常用參數總表

參數功能
-c僅編譯產生 .o
-Dmacro定義巨集
-E僅預處理輸出
-g3詳細除錯資訊 (不可與 -O 同用)
-Idir加頭文件搜尋路徑
-llibrary鏈接指定庫
-O/-O2/-O3啟用優化 (不可與 -g 同用)
-S產生組語輸出
-v顯示編譯詳細流程
-Wall啟用常見警告
-Werror警告視為錯誤
-w禁止所有警告
copyright © 萬盛學電腦網 all rights reserved