根据主题,两个C ++ ABI是否兼容? 即可以使用由前者生成的二进制(共享对象)并与后者链接(反之亦然)吗?
根据clang libc ++页面,他们的目标是
与gcc的libstdc ++的ABI兼容性,可用于某些底层功能,例如异常对象,rtti和内存分配。
这似乎暗示他们并不是针对100%兼容性。例如,在该页面上,他们还说:
通过多年的经验(包括之前实现过标准库),我们学到了很多有关实现标准容器的事情,这些事情需要ABI破损以及实现方式的根本变化。例如,对于多核计算机(特别是在具有右值引用的C ‘0x中),使用“短字符串优化”而不是使用写时复制(COW)构建std :: string是一种较好的方法,这是公认的。已确定破坏与旧版本库的ABI兼容性对于实现libc 的性能目标至关重要。
我相信GCC仍在使用引用计数的COW,因此clang似乎并不担心与ABI的兼容性std::string(与较旧的clang编译的二进制文件或与GCC兼容)。
std::string