Is clang++ ABI same as g++?
Is clang++ ABI same as g++?
可能重复:
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++编译和链接了主程序。到目前为止没有问题,但程序相当简单。
相关文章:
- 为什么我会" void value not ignored as it ought to be"?
- 为什么 std::shared_ptr 被认为是"heavy"和"expensive",但 std::array "same perfprmance as plain (c-style) arrays
- 了解 Linux 虚拟内存:valgrind 的 massif 输出显示了有和没有 --pages-as-heap 的主要差异
- 编译错误:"lvalue required as left operand of assignment" 不确定原因
- 如何理解"Temporary objs are destroyed as the last step in evaluating the full-expression"?谁能用一些简单的例子来说明这
- Atom gpp编译器给出"'C:UsersadminUser' is not recognized as an internal or..."错误
- r-在Rcpp和C++之间转换矢量(使用Rcpp::as或Rcpp:::wrap)是否会创建一个新的矢量并复制元素
- template<class T, int N> void h(T const(&)[N]); as friend function
- 我正在"void value not ignored as it ought to be"我该怎么办?
- "expression cannot be used as a function"回报声明
- OMNeT++ cPacket as std::bitset 以应用 Reed-Solomon 编码
- 函数如何在不这样做的情况下在新线程上运行"as if"?
- C++指针算术"lvalue required as left operand of assignment"错误
- 当调用时,为什么ranges ::累积的init as std :: Move(init)
- 如何在开关语句中使用 cin "as a parameter"
- regex_match as predicate
- 类型转换运算符重载与 as 非成员函数
- 我在 MinGW 和 VS 代码"g++ not recognized as a cmdlet..."时遇到构建错误
- SpinBoxDelegate displayed as a DoubleSpinBoxDelegate
- 在 Rcpp 中调用'as'没有匹配函数