Ema*_*ele 18 c++ linux gcc clang
可能重复:
GCC 4.0,4.2和LLVM ABI兼容性
根据主题,C++ ABI兼容吗?
即,可以使用前者生成的二进制(共享对象)并与后者链接(反之亦然)?
干杯
Mic*_*urr 16
根据clang libc ++页面,他们的目标是
ABI与gcc的libstdc ++兼容,用于一些低级功能,例如异常对象,rtti和内存分配.
这似乎意味着他们没有针对100%的兼容性.例如,在该页面上,他们还说:
凭借多年的经验(包括之前已经实施过标准库),我们学到了许多关于实现标准容器的事情,这些容器需要ABI破坏并对其实现方式进行根本性改变.例如,通常认为使用"短字符串优化"而不是使用写入时复制(COW)构建std :: string对于多核机器来说是一种更好的方法(特别是在C++'0x中,它具有右值引用).打破ABI与旧版本库的兼容性对于实现libc ++的性能目标至关重要.
我相信GCC仍在使用引用计数的COW,因此看起来clang并不担心ABI兼容std::string(与旧的clang编译的二进制文件或GCC).