【问题标题】:What is the "C++ ABI Specification" referred to in GCC's manual?GCC手册中提到的“C++ ABI规范”是什么?
【发布时间】:2018-10-20 08:27:21
【问题描述】:

我正在查看 C++ 的 GCC 手册,并看到以下引用:

版本 0 是指最符合 C++ ABI 的版本 规格。因此,使用版本 0 获得的 ABI 会发生变化 在不同版本的 G++ 中修复了 ABI 错误。 (source)

可以看出,以上段落引用了某种看似标准的 C++ ABI。但是,据我了解,不存在这样的 ABI。这段话在说什么?一个好的答案将给出尽可能全面的解释。将“C++ ABI 规范”放入我首选的搜索引擎并没有什么用处。

【问题讨论】:

    标签: c++ gcc x86 language-lawyer x86-64


    【解决方案1】:

    从WG21提案N4028 Defining a Portable C++ ABI 可以看出gcc指的是Common Vendor ABI (Itanium C++ ABI)

    现有实践

    现有做法的示例包括:

    • Common Vendor ABI (Itanium C++ ABI) 是朝着这个方向迈出的一步,它为某些平台上的语言指定 ABI。 现在 GCC 和 EDG 等编译器都支持它。它没有为标准库指定 ABI,因此这是必要的,但不足以例如在稳定的 API 边界上使用 std::string
    • Microsoft VC++ 同样长期以来一直为该语言提供事实上稳定但未记录的 ABI。它没有用于标准库的稳定 ABI,而是故意破坏每个主要版本的 ABI 兼容性,例如为了允许对实现进行持续改进并快速实现包含 ABI 重大更改的新标准库。李>
    • ...

    gcc 也在他们的ABI Policy and Guidelines:

    ... 此外,编译成目标文件的 C++ 源代码由编译器转换:它以特定的对齐方式和特定的布局排列对象,根据明确定义的算法修改名称,对支持有特定的安排虚函数等。这些细节被定义为编译器应用程序二进制接口,或 ABI。从 GCC 版本 3 开始,GNU C++ 编译器使用行业标准 C++ ABI,即安腾 C++ ABI。 ...

    【讨论】:

      【解决方案2】:

      GCC 默认使用 Itanium ABI:http://itanium-cxx-abi.github.io/cxx-abi/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多