2017-07-14 48 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'的东西都是针对这个用例的。