提问人:Pietro 提问时间:12/30/2011 最后编辑:Peter MortensenPietro 更新时间:11/12/2022 访问量:126729
如何在 Mac OS X 上更新 LLVM 和 Clang
How to update LLVM and Clang on Mac OS X
问:
在我的 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 吗?
答:
传统上,软件供应商对更新构建工具持保守态度,这是有充分理由的。如果您想使用 Apple 提供和修改的最新公开支持的构建工具版本,您应该坚持使用您正在运行的 OS X 版本的最新版 Xcode 中的这些版本。
苹果公司尚未更新到开源组件的最新尖端版本通常是有充分理由的,例如严重的错误。
如果您不需要 Apple 提供的修改,并且不介意生活在边缘 - 即没有 Apple 的支持,并且可能(重新)发现已知问题 - 并且不打算将编译的文件发布到其他人的系统,您可以安装自己的版本,例如,或者使用第三方包管理器,如 MacPorts http://www.macports.org/ports.php?by=name&substr=clang)。您绝对不应该尝试替换 Xcode 安装路径中的文件。/usr/local/bin
值得吗?只有你能决定。
评论
clang
Apple clang version 3.1 (tags/Apple/clang-318.0.61) (based on LLVM 3.1svn)
网站不正确。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)
评论
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
在带有 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 更新到上述版本。
评论
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,足以解决错误。
你可以使用 Homebrew 轻松构建自己的 LLVM:
brew install llvm
如果您需要特定版本,还有版本控制包:
评论
$ brew tap homebrew/versions
我强烈建议不要在macOS上更换系统编译器:
您将看到许多构建过程(例如 Xcode)依赖于特定于 Apple 的扩展。例如,上次我检查了 Apple 有自己的链接器。
此外,Linux 不强制要求二进制兼容性 - 通常,人们从源代码构建软件,或为每个操作系统版本下载特定的二进制文件。作为最终用户(而不是开发人员/专业用户)操作系统,macOS 竭尽全力保持与基于旧 macOS 版本构建的二进制文件的兼容性。
替换编译器,或者更糟的是,替换系统库,将破坏这些兼容性保证。它还可能以微妙的、不明显的方式破坏您的系统。
但是,您可以随意安装第二个 clang 副本并探索新功能,但不要理会系统编译器。/usr/local
另请注意,Apple 不支持将软件提交到非使用 Xcode 及其包含的编译器构建的应用商店。虽然如果你这样做,你可能会被忽视,但如果你的编译器没有做任何苹果编译器做的事情,你可能会在应用商店审查期间被拒绝。
评论