GCC手册中提到的“ C ++ ABI规范”是什么?

时间:2018-10-20 08:27:22

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

我在查看C ++的GCC手册,发现以下引言:

  

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

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

2 个答案:

答案 0 :(得分:7)

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

  

现有实践
  现有做法的示例包括:
  -通用供应商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,即Itanium C ++ ABI 。 ...

答案 1 :(得分:2)

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