gcc工具鏈簡述

工具鏈軟件包括BINUTILS、GCC、GLIBC、GDB等。編程

BINUTILS是二進制程序處理工具,包括連接器、彙編器等目標程序處理的工具。數組

GCC(GNU Compiler Collection)是編譯器。對於C/C++語言的完整支持,須要支持glibc庫。函數

GLIBC是應用程序編程的函數庫軟件包,能夠編譯生成靜態庫和共享庫。完整的GCC須要支持glibc。工具

GDB是調試工具,能夠讀取可執行程序中的符號表,對程序進行源碼調試。調試

 

默認狀況下,GNU編譯器生成的目標文件格式爲elf格式。對象

elf文件由若干段(section)組成。索引

C:.text(正文段)包含程序的指令代碼ip

   .data(數據段)包含固定的數據,如常量、字符串字符串

   .bss(未初始化數據段)未初始化變量、數組等。編譯器

C++:.fini(析構函數代碼)

     .init(構造函數代碼)

連接生成的elf格式文件還不能直接下載到目標平臺上執行,可經過objcopy工具生成最終二進制文件。

連接器的任務就是將多個目標文件的.text、.data、.bss等段鏈接在一塊兒,而鏈接腳本告訴連接器從什麼地址開始放置這些段。

 

1. Binutils

由彙編器(as)產生的目標代碼(*.o)是不能直接在computer上運行的,它必須通過連接器(ld)的處理才能生成可執行代碼。

#ld –s –o test test.o

2. add2line

將地址轉換成文件名或行號對,以便調試程序

3.  ar 從文件中建立、修改、擴展文件

4.  gasp 彙編宏處理器

5.  nm  從目標文件列舉全部變量

6.  objcopy  使用GNU BSD庫

把目標文件的內容從一種文件格式複製到另外一種格式的目標文件中。

7. objdump  顯示目標文件信息

可發編譯二進制文件,也能夠對對象文件進行反彙編,並查看機器代碼。

8. readelf 顯示elf文件信息

9. ranlib 生成索引以加快對歸檔文件的訪問,並將其保存到這個歸檔文件中。

10. size 列出目標模塊或文件的代碼尺寸。

11. strings 打印可打印的目標代碼符號(至少4個字符)

12. strip 放棄全部符號鏈接,通常應用程序最終都要strip處理

13. C++filt 連接器ld經過該命令可過濾C++符號和JAVA符號,防止重載函數衝突。

14. gprof 顯示程序調用段的各類數據

相關文章
相關標籤/搜索