2017-07-14 49 views
1

我只看了下面列出的gcc-arm-none-eabi編譯器二進制文件,但我真的不知道所有使用的縮寫。我想知道這是二進制的預處理程序,鏈接器,編譯器等......瞭解gcc縮寫

$ ls /opt/gcc-arm-none-eabi-5_4-2016q3/bin/ 
arm-none-eabi-addr2line 
arm-none-eabi-ar 
arm-none-eabi-as 
arm-none-eabi-c++ 
arm-none-eabi-c++filt 
arm-none-eabi-cpp 
arm-none-eabi-elfedit 
arm-none-eabi-g++ 
arm-none-eabi-gcc 
arm-none-eabi-gcc-5.4.1 
arm-none-eabi-gcc-ar 
arm-none-eabi-gcc-nm 
arm-none-eabi-gcc-ranlib 
arm-none-eabi-gcov 
arm-none-eabi-gcov-tool 
arm-none-eabi-gdb 
arm-none-eabi-gdb-py 
arm-none-eabi-gprof 
arm-none-eabi-ld 
arm-none-eabi-ld.bfd 
arm-none-eabi-nm 
arm-none-eabi-objcopy 
arm-none-eabi-objdump 
arm-none-eabi-ranlib 
arm-none-eabi-readelf 
arm-none-eabi-size 
arm-none-eabi-strings 
arm-none-eabi-strip 

我可以猜到:gcc是編譯器? ld是鏈接器? 所有這些二進制文件的確切目的是什麼?

+0

'arm'是芯片系列; 'eabi'就像'extended ABI'(擴展的應用程序二進制接口),並且與目標代碼結構和o/s接口有關。這可以在某處找到,可能在GCC文檔中。 –

+0

您可以在[安裝 - 配置](https://gcc.gnu.org/install/configure.html)手冊中找到一些與名稱略有不連貫的信息。 –

回答

3

領先的'arm-none-eabi'是編譯器的類型。這被稱爲元組,並被指定爲配置'前綴'。許多二進制文件可能是調用另一個二進制文件(gcc)的鏈接或簡短包裝腳本。還有一些名稱是爲了防止現有的系統二進制文件具有相同的名稱或多個gcc安裝。

您可以通過在程序名稱上運行man命令來找到此信息。簡而言之,

  • addr2line - 將地址(十六進制)轉換爲代碼行號。
  • ar - 靜態庫(或歸檔)工具。
  • 作爲 - 彙編
  • C++ - C++的前端
  • C++ FILT - 轉換重整名稱與原型的功能。
  • cpp - 僅限預處理器。
  • elfedit - 精靈標題操作。
  • g ++ - C++與gnu擴展。
  • gcc - 標準二進制文件(給出的選項可以和包裝文件一樣)。
  • gcc-5.4.1 - 具有多個GCC安裝的系統的全名。
  • gcc-ar - 在多個'ar'的情況下重命名。
  • gcc-nm - 在多個'nm'的情況下重命名。
  • gcc-ranlib - 在多個'ranlib'的情況下重命名。
  • 的gcov - 代碼覆蓋率
  • gcov的工具 - 代碼覆蓋
  • GDB - 調試
  • GDB-PY - 更多最小的調試
  • gprof的 - 調用圖/分析器。
  • ld - 鏈接器(最可能是黃金)。
  • ld.bfd - 具有更多功能的老式連接器;對於大型C++項目來說慢得多。
  • nm - 在二進制文件中顯示「名稱」。
  • objcopy - 操作二進制(部分)。
  • objdump - 二進制信息。
  • ranlib - 生成庫索引。
  • readelf - 有關ELF二進制文件的信息。
  • 大小 - 程序段大小
  • 字符串 - 轉儲二進制文件中的所有字符串。
  • strip - 從二進制文件中刪除調試信息。

作爲一個概念,名稱'gcc-ar'和'ar'在物理上是相同的。但是,路徑中可能存在另一個'ar'(Solaris或其他Unix系統),'gcc-ar'名稱可用於獲取gcc特定的'ar';所有'gcc-XXX'的東西都是針對這個用例的。