階段輸入
輸出gcc示例
預編譯*.c
*.igcc -e test.c -o test.i
編譯*.i
*.sgcc -s test.i -o test.s
彙編*.s
*.ogcc -c test.s -o test.o
鏈結*.o
* gcc test.o -o test.o
gcc的格式
$ gcc test.c -o test
$ gcc -c test.c
$ gcc -o image first.c second.c third.c
有用的選項
1. 例:源程式儲存在./src中,標頭檔案儲存在同一等級的./inc中。可以在./src中編譯檔案並告訴gcc相應的標頭檔案儲存在./inc,具體如下:
$ gcc test.c -i../inc -o test
可以重複使用i格式來包含多個目錄,如下所示:
$ gcc test.c -i../inc -i../../inc2 -o test
2. 可以在編譯時候指定符號常量,如在源程式中或者標頭檔案定義了符號常量
#define test_configration
可以在命令列中使用-d選項來這樣子定義:
$ gcc -d test_configration test.c -o test
它的有點在於不必修改源程式就可以改變程式的行為。
編譯警告
1. 最經常使用的檢查普通警告的選項是-wall,這個選項開啟所有型別的警告。
$ gcc -wall test.c -o test
2. 大多數錯誤選項都有乙個否定形式用來將他們關掉(如果他們已預設開啟或者在-wall選項的控制下開啟了)。如想開啟-wall且想關閉unused警告集可以輸入:
$ gcc -wall -wno -unused test.c -o test
3. 選項-werror使得編譯器將所有的警告當作錯誤來處理。即報告錯誤並退出編譯過程。
gcc優化
優化工作有三個個不相容的方向,選擇優化時之可以選擇其一:
將速度更快,檔案更小作為目標
將速度更快作為目標,允許檔案變大
將檔案更小作為目標,允許程式變慢
優化等級
說明-o0
不進行優化,預設等級
-o, -o1
嘗試同時縮短編碼時間和減小映像檔案
-o2比-o1更多的優化,但只在不導致檔案增大時進行加快速度的優化,只在不導致速度變慢時進行減小檔案的優化
-os以減小結果檔案為優化目標。比-o2少乙個可能導致檔案增**項。
-o3比-o2多兩個優化選項。
架構相關的優化
指定目標結構也是可以有效改進軟體效能和大小。-mcpu選項告訴編譯器生成針對特定cpu型別的指令。如:
$ gcc -mcpu=pentium2 test.c -o test
除錯選項
如果想用符號偵錯程式來除錯**,可以用-g標記來指定在映像中為gdb生成除錯資訊。-g可以帶乙個引數指定除錯資訊的格式。如:
$ gcc -gdwarf-2 test.c -o test
其他工具
1. size給出可執行映像或者中間目標檔案的大小。給出text大小(指令數),data段,bss段。如:
$ gcc main.c -o main
$ size main
text data bss dec hex filename
1038 252 8 1298 512 main
$ 2. objdump可以得到有關映像更加詳盡的細節
$ objdump --syms test.o // 得到映像或者目標檔案中的符號列表
$ objdump --disassemble test.o // 得到目標檔案中找到的函式以及gcc為這些函式分別生成的指令。
3. nm可以有助於理解目標檔案中出現的符號。它列出各個符號以及根據符號的型別列出相應的細節資訊。
啥是工具鏈和GNU工具鏈
在軟體工程中,工具鏈 英語 toolchain 是一系列用於製作軟體的工具。這些工具一般乙個接乙個地運用,一件工具的輸出輸入至下一件工具,但廣義上可以單單是指多個相關的工具。工具鏈一般包括用來編輯源 的文字編輯器 生成可執行檔案的編譯器及鏈結器 連線作業系統的庫 以及偵錯程式。例子有gnu tool...
使用GNU工具鏈的優勢
出處 http www.zdnet.com.cn developer code story 0,3800066897,39142725,00.htm 2003 06 27 12 14 pm gnu編譯器 gcc 是乙個 免費 的c c 工具鏈,有力的支撐了linux系統的發展。由於它可被看作許多嵌入...
linux 學習筆記 GNU工具鏈簡介
我們通常無法直接通過linux核心,而需要借助linux核心之上的gun工具鏈來進行 檔案處理 文字操作 程序管理 等操作。gnu linux shell為使用者提供了 啟動程式 管理檔案系統上的檔案 管理執行在linux系統上的程序 的途徑shell允許你輸入文字命令,之後將解釋命令並在核心中執行...