理解gcc缩写

3

我刚刚查看了下面列出的gcc-arm-none-eabi编译器二进制文件,但我真的不知道所有使用的缩写。我想知道哪个二进制文件是预处理器、链接器、编译器等等...

$ 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是链接器?所有这些二进制文件的确切目的是什么?

arm 是芯片系列;eabi 类似于“扩展 ABI”(扩展应用程序二进制接口),与目标代码结构和操作系统接口有关。这在某个地方有记录,可能在 GCC 文档中。 - Jonathan Leffler
您可以在安装-配置手册中找到一些关于名称的略微不连贯的信息。 - Jonathan Leffler
1个回答

4
'arm-none-eabi'是编译器的类型。这被称为元组,并在配置“前缀”中指定。许多二进制文件可能是链接或短包装脚本,调用另一个二进制文件(gcc)。此外,有些名称只是为了防止您具有相同名称的现有系统二进制文件或多个gcc安装。
您可以通过对程序名称运行'man'命令来找到此信息。简要地说,
- addr2line - 将地址(十六进制)转换为代码行号。 - ar - 静态库(或归档)工具。 - as - 汇编器 - c++ - C ++ 前端 - c++filt - 将混淆名称转换为带有原型的函数。 - cpp - 仅预处理器。 - elfedit - elf头操纵。 - g++ - 具有gnu扩展的C ++。 - gcc - 标准二进制文件(给定选项可以像包装器一样执行相同操作)。 - gcc-5.4.1 - 系统中多个GCC安装的完整名称。 - gcc-ar - 在出现多个“ar”的情况下重命名。 - gcc-nm - 在出现多个“nm”的情况下重命名。 - gcc-ranlib - 在出现多个“ranlib”的情况下重命名。 - gcov - 代码覆盖率 - gcov-tool - 代码覆盖率 - gdb - 调试器 - gdb-py - 更简单的调试器 - gprof - 调用图/分析器。 - ld - 链接器(很可能是gold)。 - ld.bfd - 旧式链接器,具有更多功能;对于大型C ++项目来说速度要慢得多。 - nm - 在二进制文件中显示“名称”。 - objcopy - 操作二进制文件(节)。 - objdump - 关于二进制文件的信息。 - ranlib - 生成库索引。 - readelf - ELF二进制文件的信息。 - size - 程序段大小 - strings - 转储二进制文件中的所有字符串。 - strip - 从二进制文件中删除调试信息。
作为一个概念,“gcc-ar”和“ar”的名称物理上是相同的。但是,在路径中可能存在另一个“ar”(Solaris或其他Unix系统),可以使用“gcc-ar”名称获取特定于gcc的“ar”;所有“gcc-XXX”都是为此用例而设计的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接