GCC是一族工具的集合,包含預處理器、編譯器、匯編器、鏈接器。
對于默認的文件名,GCC可以自動選擇工具自動完成文件處理過程。
從C語言的源程序道可執行文件,實質上是依靠GCC調用一系列工具完成的。
GCC默認處理的文件
文件類型 | 擴展名 | 文件說明 |
---|---|---|
文本文件 | *.c | C源文件 |
文本文件 | *.c | C源文件 |
文本文件 | *.cpp | C++源文件 |
文本文件 | *.i | 預處理后的C源文件 |
文本文件 | *.ii | 預處理后的C++源文件 |
文本文件 | *.s | 匯編語言 |
文本文件 | *.h | 頭文件 |
二進制文件 | *.o | 目標文件 |
二進制文件 | *.so | 動態庫(共享庫) |
二進制文件 | *.a | 靜態庫(歸檔文件) |
Binutils工具集合
Binutils是一個二進制工具集合,包含匯編、鏈接以及一系列的輔助工具。
工具名稱 | 說明 |
---|---|
as | GNU匯編器。將處理器的匯編代碼轉換成可執行代碼,并存儲道目標文件.o文件中 |
ld | GNU鏈接器。將一個或多個目標文件.o庫組合成一個可執行程序;或者生成靜態庫和動態庫 |
ar | 歸檔工具,可以將多個文件組合成一個大文件,并且可以讀取原始文件的內容 |
stripe | 取出文件中的符號 |
nm | 用來顯示目標文件中的符號 |
objectcopy | 轉換成二進制代碼的工具 |
objdump | 顯示目標文件的反匯編工具 |
readelf | 顯示ELF文件中的各種信息 |
string | 顯示文件中的可打印字符 |
ranlib | 產生歸檔文件的索引,并將其保存到歸檔文件中,索引同時列出歸檔文件各成員所定義的可重分配目標文件 |
addr2line | 可以將一個可執行程序的地址映射到源文件的對應行 |
gprof | 顯示程序調用段的各種數據 |
C語言編譯工作流程
分為4步:
1、預處理:生成.i文件
2、編譯:將預處理后的文件轉換成匯編語言,生成文件.s
3、匯編:由匯編代碼生成目標代碼,即機器代碼,生成可執行文件.o
4、鏈接:有各個文件的目標代碼生成可執行程序