GNU編譯工具鏈

2021-08-26 04:26:17 字數 2037 閱讀 7965

階段輸入

輸出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允許你輸入文字命令,之後將解釋命令並在核心中執行...