Apple Clang编译器版本架构架构

Apple clang compiler versioning schema?

本文关键字:版本 编译器 Clang Apple      更新时间:2023-10-16

不久前,gcc> = 5和clang> = 4编译器更改了其版本编号的语义,因此任何非BugFix版本中的主要版本号都会增加。

苹果在ABI兼容性方面是否遵循与Clang编译器的任何版本化架构?我想知道apple-clang 9.0是否与9.1兼容。

苹果在每个Xcode版本中都会颠簸其编译器版本号,因此查找ABI更改的适当位置是Xcode Release Notes。我能发现有Xcode 6的最新ABI更改:

Xcode 6中的LIBC 标头包括一个更改以使STD :: Pair具有微不足道的构造函数。此修复程序对于性能和符合C 标准很重要,但是使用std :: Pair。

更改C 代码的ABI。

这意味着自2014年以来没有ABI变化。

edit :clang和apple-clang之间的映射似乎是(从此处拿走,并通过功能测试来添加最后一行(:

5.1 -> 3.4
6.0 -> 3.5
7.0 -> 3.7
7.3 -> 3.8
8.0 -> 3.9
9.0 -> 4.0
9.1 -> 5.0

所以我猜苹果会在主要Xcode版本之间从Mainline Clang整合到Apple-clang的次要版本。

但对于原始的问题,这并不重要:语言的ABI兼容性直到他们这样说,这对于标准库是可能的(但很少发生(,并且对于核心语言几乎是不可想象的。对于GCC,Apple甚至保证不做后者,但可能会忘记更新文档时更新Clang:

因为GCC 4.0符合ITANIUM C ABI,C 对象为 链接与其他OS X编译器构建的对象互相兼容 符合此规范。苹果保证未来发布 OS X的GCC也将符合ITANIUM C ABI。这意味着 开发人员可以安全地运送动态共享库 接口涉及C 类,尽管有一些警告:

  • Apple仅保证仅针对核心语言功能的ABI稳定性。它 不能保证图书馆课的稳定性,包括 STD :: String,STD :: MAP和STD :: Ostream等。

但是,由于gcc命令链接到Apple-Clang的任何近期Xcode安装,此保证也应适用于后者。