gcc工具鏈簡述


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

BINUTILS是二進制程序處理工具,包括鏈接器、匯編器等目標程序處理的工具。

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

GLIBC是應用程序編程的函數庫軟件包,可以編譯生成靜態庫和共享庫。完整的GCC需要支持glibc。

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

 

默認情況下,GNU編譯器生成的目標文件格式為elf格式。

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

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

   .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 顯示程序調用段的各種數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM