【问题标题】:Proper way to upgrade from llvm-g++-4.2 to g++-4.7 on Mac在 Mac 上从 llvm-g++-4.2 升级到 g++-4.7 的正确方法
【发布时间】:2012-05-28 15:01:05
【问题描述】:

我有安装了命令行工具的 Lion 10.7.3。我想尝试使用 C++11,所以我使用自制软件安装 GCC 4.7,如 here 所述。

我现在如何将 /usr/bin/g++ 升级为 Homebrew 安装的那个?它像符号链接一样简单吗?我只是想仔细检查并确定。谢谢!

【问题讨论】:

  • 注意clang有C++11特性clang.llvm.org/cxx_status.html
  • 这可能是一个非常糟糕的主意。为什么不单独留下 /usr/bin/g++,并以相关方式指定您的 g++,例如,通过将“CXX=/usr/local/bin/g++”传递给 ./configure 或 make,或将 /usr/local/ bin 在路径上的 /usr/bin 上方,还是显式使用 g++-4.7 而不是 g++?
  • 另外,请记住 gcc-4.7 没有 apple-gcc-4.0、apple-gcc-4.2 和 llvm-gcc-4.2 中可用的许多功能,这意味着 -arch标志、较新的 ObjC 功能等将不起作用。
  • @abarnert,非常感谢您的建议。我只是想用 C++11 编译器设置 CodeRunner krillapps.com/coderunner。我最终只是通过 Homebrew 安装了 gcc 4.7,然后只配置了 CodeRunner 以指向 gcc 4.7,而其他所有内容都保持不变。非常感谢你的智慧。 =)
  • @abarnert:就是这样。你应该把你的评论变成一个答案,这样它就可以被接受和关闭。

标签: macos gcc homebrew


【解决方案1】:

首先,您确定需要 g++ 4.7 吗?从C++11 implementation status 页面可以看出,clang 的最新版本也支持大部分 C++11。当然,还有一些东西是 g++ 处理而 clang 没有的,但也有一些东西是 clang 支持而 g++ 不支持的。而且,更重要的是,您已经拥有来自 Apple 的最新版本的 clang,已配置并准备就绪,作为您的默认编译器。另外,4.2 之后的 g++ 不支持像 -arch 这样的 Mac 扩展,这意味着您不能使用它来构建大量第三方软件(因为大多数配置脚本假定如果您在Mac,你的编译器支持 Mac 扩展)。


但如果你想要 g++ 4.7,你可以做到。只是不要试图用不同的版本替换/usr/bin/g++。切勿将 /usr/bin(或 /System)中的任何内容替换为非 Apple 内容,除非在极少数情况下(当您从知道他们在说什么的人那里得到强有力的保证时)。

更好的做法是并行安装另一个编译器。只需让 Homebrew 安装它最喜欢的方式(因此它安装到一些前缀,如 /usr/local/Cellar/gcc/4.7,然后将所有适当的东西符号链接到 /usr/local/bin 等),并以这种方式使用它。

编译代码时,不要写g++,而是写/usr/local/bin/g++g++-4.7

如果您厌倦了这样做,请将 /usr/local/bin 放在 PATH 上高于 /usr/bin 的位置,或者创建一个 shell 别名,或者将其粘贴到环境变量 CXX 中并写成 $CXX 而不是 g++

如果您使用的是 GUI IDE,您应该能够通过在某处设置路径来将其配置为使用您的编译器。 (除非您使用的是 Xcode,否则您只能将其配置为使用 Apple 测试的编译器。)


这就是您试验自己的代码所需要的一切。如果你想用这个编译器编译第三方应用程序,那可能会有点复杂。您通常不会实际编译每个源文件并将结果链接在一起;您只需执行configure && make 并让他们为您完成繁重的工作。

幸运的是,大多数包都会遵守标准环境变量,尤其是 CXX 用于指定默认 C++ 编译器,CC 用于默认 C 编译器。 (这就是为什么我在上面建议使用名称CXX。)

请记住,g++ 4.7 不支持 Mac 扩展,所以如果您不准备调试一堆基于 autoconf 的配置脚本,这些脚本抱怨您的编译器无法生成代码,因为它假定它可能会抛出-arch x86_64 在 Mac 上的任何编译器等处,不要这样做。

【讨论】:

    猜你喜欢
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多