【问题标题】:Understanding the gcc abbreviations了解 gcc 缩写
【发布时间】:2017-07-14 05:54:48
【问题描述】:

我只是查看了下面列出的 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”(扩展应用程序二进制接口),与目标代码结构和 o/s 接口有关。这记录在某处,可能在 GCC 文档中。
  • 您可以在Installation – Configuration 手册中找到一些关于名称的稍微不连贯的信息。

标签: gcc arm toolchain


【解决方案1】:

前面的“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 工具 - 代码覆盖率
  • 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' 的东西都适用于这个用例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-23
    • 2014-04-01
    • 2017-02-07
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    相关资源
    最近更新 更多