是铿锵+ ABI相同的G + +?

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

按照主题,都是C ++ ABI兼容吗?
也就是说,可以使用前者生成的二进制(Shared Object)并与后者连接(反之亦然)?

干杯

Solutions Collecting From Web of "是铿锵+ ABI相同的G + +?"

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

ABI与gcc的libstdc ++兼容,用于某些低级特性,例如异常对象,rtti和内存分配。

这似乎意味着他们没有瞄准100%的兼容性。 例如,在那个页面上他们也说:

从多年的经验(包括之前实施过的标准库)中,我们已经学到了很多关于实施标准容器的事情,这些标准容器需要进行ABI破坏以及如何实施ABI。 例如,通常认为,使用“短字符串优化”而不是使用写时复制(COW)来构建std :: string对于多核机器(特别是在具有右值引用的C ++'0x)中是一种优越的方法。 为了实现libc ++的性能目标,打破ABI与老版本库的兼容性被认为是至关重要的。

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

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