【问题标题】:How to update LLVM & Clang on Mac OSX?如何在 Mac OSX 上更新 LLVM 和 Clang?
【发布时间】:2012-01-30 06:23:12
【问题描述】:

在我的 Mac OSX 版本(Lion 10.7.1,XCode 4.1)上,有 LLVM 3.0svn 和 Clang 2.1。 current versions 是 LLVM 3.0 和 Clang 3.0。

XCode web site看来,最新版本(4.2.1)还是使用LLVM 2.0,这似乎是个错误。

你知道如果安装最新的 XCode 我会得到更新版本的 LLVM/Clang?

你知道installing Clang manually有任何可能的问题吗?

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

【问题讨论】:

  • 另请注意,Apple 使用自己的 llvm/clang 版本控制。所以,Apple LLVM 3.0 / clang 3.0 与 llvm.org 的 LLVM 3.0 不同 :) 后者是更新的。

标签: xcode macos osx-lion llvm clang


【解决方案1】:

网站不正确。 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 build 2336.1.00)

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

【讨论】:

  • 我在 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
  • 我使用的是同一版本的 Xcode,但 clang --version 报告:Apple clang 版本 4.0 (tags/Apple/clang-421.0.60) (基于 LLVM 3.1svn) 目标:x86_64- apple-darwin12.1.0 线程模型:posix。也许你有一个旧版本的 Xcode 仍然安装在 4.4.1 旁边?还要检查 Xcode 首选项中的“下载”选项卡,以查看是否已安装命令行工具组件。
  • @JamesMcKinney 您可能需要在命令行上运行 xcode-select 以将您的系统指向已安装 Xcode 版本的 clang 版本。
【解决方案2】:

软件供应商传统上对更新构建工具持保守态度,这是有充分理由的。如果您想使用 Apple 提供和修改的最新公开支持的构建工具版本,您应该坚持使用最新版本的 Xcode 中的那些,以用于您正在运行的 OS X 版本。 Apple 尚未更新到开源组件的最新尖端版本通常有充分的理由,例如严重的错误。如果您不需要 Apple 提供的修改并且不介意生活在边缘 - 即没有来自 Apple 的支持并且可能(重新)发现已知问题 - 并且不打算将编译后的文件发送到其他人的系统,您可以/usr/local/bin 或使用第三方包管理器(如 MacPorts http://www.macports.org/ports.php?by=name&substr=clang)中安装您自己的版本。您绝对应该尝试替换 Xcode 安装的路径中的文件。这值得么?只有你自己可以决定。

【讨论】:

  • 更新:当前适用于 OS X 10.7 的 Xcode 4.3.3 具有更新版本的clang:Apple clang version 3.1 (tags/Apple/clang-318.0.61) (based on LLVM 3.1svn)
  • Apple 的版本编号与 clang 的不匹配。 Apple clang 3.1 是在 clang 3.1 最终版本之前基于源代码构建的。它缺少一些 C++11 特性,比如初始化列表。他们还在 4.4DP 中将版本提升到 4.0,但在功能方面仍然是 3.1 级。
  • 那是 FUD,clang 的稳定版本相当稳定,FreeBSD 等其他操作系统跟踪最新版本
  • 我不确定您的 FUD 评论指的是什么,但 FreeBSD 和其他操作系统使用的 clang 版本与我提出的观点无关。无论好坏,Apple 都提供了自己版本的 clang 和其他工具作为 Xcode 和命令行工具的一部分,而这些正是 Apple 自己用来构建 OS X 以及它们支持开发人员使用的东西。当然,通常您可以使用其他版本或其他编译器(例如 gcc),一切都会好起来的。但是,当你确实遇到了那个奇怪的问题或者你需要那个特殊的选择时,为什么要让生活变得更加困难?
  • 因为您可能想要使用 LLVM 版本中包含但 AppleClang 中未包含的功能。例如,我昨天为协程 TS 做了这个。
【解决方案3】:

您可以使用 homebrew 轻松构建自己的 LLVM:

brew install llvm

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

  • llvm@3.7
  • llvm@3.8
  • llvm@3.9
  • llvm@4

【讨论】:

  • 这不再有效,因为该水龙头现在是空的。 $ brew tap homebrew/versions 返回“警告:自制程序/版本已被弃用。此水龙头现在是空的,因为它的所有公式都已迁移。”现在有什么办法吗?
【解决方案4】:

在带有 XCode 4.6 的 Mountain Lion 10.8.2 上,版本为:

$ 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 Developer Account 直接下载更新 XCode for Lion,并安装命令行工具,将 clang 和 llvm 更新到以上版本。

【讨论】:

  • 正如所料,在 OSX 10.8.3 Xcode 4.6.1 发布后,包含 clang-425.0.27
【解决方案5】:

OS X 更新版本 10.9.2 将 XCode 带到了版本 5.1 (5B130a),并加入了最新的稳定版(针对 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,足以解决错误。

【讨论】:

    【解决方案6】:

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

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

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

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

    但是请随意在/usr/local 左右安装第二个clang 副本并探索新功能,但不要管系统编译器。

    另外请注意,Apple 不支持向应用商店提交不是使用 Xcode 及其包含的编译器构建的软件。如果您这样做可能会被忽视,但如果您的编译器未能执行 Apple 编译器所做的任何事情,您可能会在应用商店审核期间被拒绝。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-14
      • 2014-12-12
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 2017-10-28
      相关资源
      最近更新 更多