本文為 GCC 使用進階補充,重點闡述庫依賴機制、優化選項權衡、靜態與動態鏈接差異及常用參數總表。
gcc -E hello.c -o hello.i (預處理)gcc -c hello.i -o hello.o (目標碼)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 | 禁止所有警告 |