当前位置: 首页 > 面试题库 >

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

汪阳飇
2023-03-14
问题内容

根据主题,两个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兼容)。



 类似资料:
  • 我如何强制gcc/g不使用寄存器,而只使用x86\u 64中的堆栈将参数传递给函数,就像在32位版本中一样(并可能以这种方式获取函数结果)。我知道它破坏了官方ABI,调用方和被叫方都必须以这种方式编译,这样它才能工作。我不在乎是否使用推送/弹出或移动/子方式。我希望编译器应该有一个可以强制执行它的标志,但我找不到它。

  • 下面的代码在g7.2.0中编译成功(编译标志是),但在clang 5.0.0中编译失败(使用相同的标志,)和vc 15.4(编译标志是): 哪种编译器行为符合标准?如何将该模板应用更改为在clang上编译? 叮当声错误消息: VC错误消息:

  • ABI的进一步细节 可以参阅各种ABI单元测试的编码/解码的例子。 完整的ABI规范文件可以看 Solidity documentation。

  • Clang 是一个 C++ 编写、基于 LLVM、发布于 LLVM BSD 许可证下的 C/C++/Objective C/Objective C++ 编译器,其目标(之一)就是超越 GCC。 Clang 开发事出有因,Wiki 介绍如下: Apple 使用 LLVM 在不支持全部 OpenGL 特性的 GPU (Intel 低端显卡) 上生成代码 (JIT),令程序仍然能够正常运行。之后 LLV

  • 问题内容: 我们收到了一些为linux编译的库(.a)(可能是用GCC 6.x编译的)。 我们正在使用GCC 4.8,并且在尝试链接时遇到类型错误: 通常,可以通过确保所有单元都使用相同的标志进行编译来解决此问题。但是,如果我理解正确,它是由GCC 5.1及更高版本引入的。 是否有办法在GCC 4.8上进行这项工作,还是我们需要让人们用不同的方式重新编译库? 我想如果我们能够切换到GCC> = 5

  • 一个小时左右 1. 自我介绍 2. C++11用过哪些新特性 3. 手写shared_ptr、unique_ptr、weak_ptr以及如何使用 4. 引用计数的原理,存放在哪里怎么找到 5. 手写grpc的异步使用方式 6. 题目:链表合并 7. 项目问题(很多) 后面忘了