Is clang++ ABI same as g++?

Is clang++ ABI same as g++?

本文关键字:g++ as same clang++ ABI Is      更新时间:2023-10-16

可能重复:
GCC 4.0、4.2和LLVM ABI兼容性

根据主题,两个C++ABI是否兼容
也就是说,与前者生成的二进制(共享对象)是否可以使用并与后者链接(反之亦然)?

干杯

根据clang-libc++页面,他们的目标是

ABI与gcc的libstdc++的兼容性,用于一些低级功能,如异常对象、rtti和内存分配。

这似乎意味着他们的目标不是100%的兼容性。例如,在该页面上,他们还说:

根据多年的经验(包括以前实现过标准库),我们了解到了许多关于实现标准容器的事情,这些标准容器需要ABI破坏,并对它们的实现方式进行根本性的更改。例如,人们普遍认为,使用"短字符串优化"而不是使用写时复制(COW)来构建std::string对于多核机器来说是一种优越的方法(尤其是在具有右值引用的C++’Ox中)。打破ABI与旧版本库的兼容性被认为是实现libc++性能目标的关键。

我相信GCC仍在使用引用计数的COW,因此clang似乎并不担心ABI与std::string的兼容性(无论是与较旧的clang编译的二进制文件还是与GCC的兼容性)。

它似乎是兼容的。Clang还为他们自己的C++运行时提供了一个项目,并声明它与GNU stdlibc++是低级别兼容的。我只是尝试了一个小的示例程序,在那里我用clang++编译了一个文件,并用g++编译和链接了主程序。到目前为止没有问题,但程序相当简单。

相关文章: