一尘不染

clang ++ ABI和g ++一样吗?

linux

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


阅读 329

收藏
2020-06-03

共1个答案

一尘不染

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

与gcc的libstdc ++的ABI兼容性,可用于某些底层功能,例如异常对象,rtti和内存分配。

这似乎暗示他们并不是针对100%兼容性。例如,在该页面上,他们还说:

通过多年的经验(包括之前实现过标准库),我们学到了很多有关实现标准容器的事情,这些事情需要ABI破损以及实现方式的根本变化。例如,对于多核计算机(特别是在具有右值引用的C
‘0x中),使用“短字符串优化”而不是使用写时复制(COW)构建std ::
string是一种较好的方法,这是公认的。已确定破坏与旧版本库的ABI兼容性对于实现libc
的性能目标至关重要。

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

2020-06-03