如何在 Mac OS X 上更新 LLVM 和 Clang

How to update LLVM and Clang on Mac OS X

提问人:Pietro 提问时间:12/30/2011 最后编辑:Peter MortensenPietro 更新时间:11/12/2022 访问量:126729

问:

在我的 Mac OS X 版本(10.7.1 (Lion) 和 Xcode 4.1)上,有 LLVM 3.0svn 和 Clang 2.1。 当前版本为 LLVM 3.0 和 Clang 3.0。

Xcode 网站来看,最新版本 (4.2.1) 似乎仍然使用 LLVM 2.0,这似乎是一个错误。

如果安装最新的 Xcode,我会得到更新版本的 LLVM/Clang 吗?

手动安装 Clang 是否存在任何可能的问题?

安装后,我拥有的所有 IDE(例如 NetBeans)都会自动使用新的 Clang 吗?

Xcode macOS OSX-Lion LLVM 叮当声

评论

2赞 Anton Korobeynikov 12/30/2011
另请注意,Apple 对 llvm/clang 使用自己的版本控制。因此,Apple LLVM 3.0 / clang 3.0 与 llvm.org 的 LLVM 3.0 不同:)后者是最近的。

答:

8赞 Ned Deily 12/30/2011 #1

传统上,软件供应商对更新构建工具持保守态度,这是有充分理由的。如果您想使用 Apple 提供和修改的最新公开支持的构建工具版本,您应该坚持使用您正在运行的 OS X 版本的最新版 Xcode 中的这些版本。

苹果公司尚未更新到开源组件的最新尖端版本通常是有充分理由的,例如严重的错误。

如果您不需要 Apple 提供的修改,并且不介意生活在边缘 - 即没有 Apple 的支持,并且可能(重新)发现已知问题 - 并且不打算将编译的文件发布到其他人的系统,您可以安装自己的版本,例如,或者使用第三方包管理器,如 MacPorts http://www.macports.org/ports.php?by=name&substr=clang)。您绝对不应该尝试替换 Xcode 安装路径中的文件。/usr/local/bin

值得吗?只有你能决定。

评论

0赞 Ned Deily 7/7/2012
更新:当前适用于 OS X 10.7 的 Xcode 4.3.3 具有较新版本的 : 。clangApple clang version 3.1 (tags/Apple/clang-318.0.61) (based on LLVM 3.1svn)
3赞 Stephen Chu 7/8/2012
Apple 的版本编号与 clang 的版本编号不匹配。Apple clang 3.1 是在 clang 3.1 最终版之前基于源代码构建的。它缺少一些 C++ 功能,如初始值设定项列表。他们还在 4.4DP 中将版本提升到 4.0,但在功能方面仍然是 clang 3.1 级别。
2赞 jupp0r 6/9/2015
这就是 FUD,clang 的稳定版本相当稳定,而 FreeBSD 等其他操作系统会跟踪最新版本
0赞 Ned Deily 6/10/2015
我不确定你的 FUD 评论指的是什么,但 FreeBSD 和其他操作系统使用什么版本的 clang 与我的观点无关。无论好坏,Apple 都提供了自己的 clang 版本和其他工具,作为 Xcode 和命令行工具的一部分,这些是 Apple 自己用来构建 OS X 的工具,也是它们支持开发人员使用的工具。当然,通常您可以使用其他版本或其他编译器(例如 gcc),一切都会好起来的。但是,当你遇到那个奇怪的问题,或者你需要那个特殊的选择时,为什么要让生活变得更加困难呢?
1赞 jupp0r 12/20/2017
因为您可能希望使用 AppleClang 中未包含的 LLVM 版本中包含的功能。例如,我昨天为协程 TS 做了这件事。
8赞 Chris Lattner 12/30/2011 #2

网站不正确。Xcode 4.2.1 和 4.2 包括 LLVM 3.0 和 Clang 3.0:

clang --version
Apple clang 版本 3.0 (tags/Apple/clang-211.12) (基于 LLVM 3.0svn)

clang++ --version
Apple clang 版本 3.0 (tags/Apple/clang-211.12) (基于 LLVM 3.0svn)

llvm-g++ --version
i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1(基于 Apple Inc. build 5658)(LLVM 内部版本 2336.1.00)

llvm-gcc --version
i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1(基于 Apple Inc. build 5658)(LLVM 内部版本 2336.1.00)

评论

0赞 James McKinney 9/11/2012
我在 Xcode 4.4.1 上,我仍然看到:Apple clang version 2.1 (tags/Apple/clang-163.7.1) (based on LLVM 3.0svn) Target: x86_64-apple-darwin11.4.0 Thread model: posix
0赞 Alistair McMillan 9/16/2012
我使用的是相同版本的 Xcode,但 clang --version 报告:Apple clang 版本 4.0 (tags/Apple/clang-421.0.60)(基于 LLVM 3.1svn) 目标:x86_64-apple-darwin12.1.0 线程模型:posix。也许您仍然与 4.4.1 一起安装了旧版本的 Xcode?此外,请检查 Xcode 首选项中的“下载”选项卡,查看是否已安装命令行工具组件。
0赞 leecbaker 5/7/2014
@JamesMcKinney 您可能需要在命令行上运行 xcode-select,以将系统指向随已安装的 Xcode 版本一起安装的 clang 版本。
1赞 Abhisek Mukherjee 3/7/2013 #3

在带有 Xcode 4.6 的 10.8.2 (Mountain Lion) 上,版本为:

$ clang --version

Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
Target: x86_64-apple-darwin12.2.0
Thread model: posix

$ clang++ --version

Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
Target: x86_64-apple-darwin12.2.0
Thread model: posix

$ llvm-g++ --version

i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ llvm-gcc --version

i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

您也可以从 App Store 或 Apple 开发者帐户直接下载更新 Xcode for Lion,并安装命令行工具,这些工具会将 Clang 和 LLVM 更新到上述版本。

评论

0赞 Abhisek Mukherjee 3/16/2013
不出所料,在OSX 10.8.3之后,Xcode 4.6.1发布,其中包含clang-425.0.27
2赞 tngn 3/27/2014 #4

OS X 更新版本 10.9.2 (Mavericks) 将 Xcode 升级到版本 5.1 (5B130a),并将 Clang 升级到最新的稳定版本(适用于 OS X):

clang --version

输出:

Apple LLVM version 5.1 (clang-503.0.38) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.1.0
Thread model: posix

在我的 Mac 上,llvm-gcc 和 llvm-g++ 是指向此 Clang 的符号链接:

lrwxr-xr-x  1 root  wheel     5B 25 Oct 16:48 /usr/bin/llvm-gcc -> clang
lrwxr-xr-x  1 root  wheel     7B 25 Oct 16:48 /usr/bin/llvm-g++ -> clang++

我最新的 R 安装配置为使用 llvm-gcc-4.2,这在构建 SHLIB 时会导致错误。以相同的方式为 llvm-gcc-4.2 和 llvm-g++-4.2 创建符号链接而不是替换 LLVM 或 CLANG,足以解决错误。

8赞 jupp0r 6/9/2015 #5

你可以使用 Homebrew 轻松构建自己的 LLVM:

brew install llvm

如果您需要特定版本,还有版本控制包:

评论

0赞 Brandon H. Gomes 12/20/2017
这不再起作用,因为该水龙头现在是空的。 返回“警告:自制软件/版本已弃用。这个水龙头现在是空的,因为它的所有公式都被迁移了。现在有什么办法可以做到这一点吗?$ brew tap homebrew/versions
2赞 uliwitness 1/22/2020 #6

我强烈建议不要在macOS上更换系统编译器:

您将看到许多构建过程(例如 Xcode)依赖于特定于 Apple 的扩展。例如,上次我检查了 Apple 有自己的链接器。

此外,Linux 不强制要求二进制兼容性 - 通常,人们从源代码构建软件,或为每个操作系统版本下载特定的二进制文件。作为最终用户(而不是开发人员/专业用户)操作系统,macOS 竭尽全力保持与基于旧 macOS 版本构建的二进制文件的兼容性。

替换编译器,或者更糟的是,替换系统库,将破坏这些兼容性保证。它还可能以微妙的、不明显的方式破坏您的系统。

但是,您可以随意安装第二个 clang 副本并探索新功能,但不要理会系统编译器。/usr/local

另请注意,Apple 不支持将软件提交到非使用 Xcode 及其包含的编译器构建的应用商店。虽然如果你这样做,你可能会被忽视,但如果你的编译器没有做任何苹果编译器做的事情,你可能会在应用商店审查期间被拒绝。