在 OSX 上更新 GCC

Posted

技术标签:

【中文标题】在 OSX 上更新 GCC【英文标题】:Update GCC on OSX 【发布时间】:2010-10-24 16:36:07 【问题描述】:

所以我是一名新程序员,我刚刚在我的 Macbook 上安装了 XCode 以获得 GCC。我认为 Xcode 是在 OSX 上获取 GCC 的唯一方法。现在,当我在 C++ 中运行我的 Hello World 应用程序时,g++ 出现说它是 4.0.1 版,但是当我查找以 g 开头的命令时,我也看到了 g++-4.2。有没有办法让 4.2 默认而不是 4.0.1,还有没有办法将 gcc 更新到最新版本 4.4.0?

编辑:好的,所以我安装了 macports 并安装了 gcc4.4,它在终端上显示为 gcc-mp-4.4,我如何使用 gcc_select 将其设为默认值,例如命令和内容。谢谢。

【问题讨论】:

【参考方案1】:

如果你安装 macports 你可以安装 gcc select,然后选择你的 gcc 版本。

/opt/local/bin/port install gcc_select

查看您的版本使用

port select --list gcc

要选择一个版本,请使用

sudo port select --set gcc gcc40

【讨论】:

我没有安装那个端口,但我还有 gcc_select。这是一个带有 OS X 10.4 的旧 Xcode。 如果您需要有关 MacPorts 的更多信息,他们在这里 (macports.org),并且他们的 gcc 端口高达 4.5。 我已经这样做了,但是当我启动 python 解释器时,我仍然看到 gcc 4.0.1 现在看来命令是port select --list gcc 列出和port select --set gcc mp-gcc45 设置(用你的版本替换mp-gcc45。)你仍然必须安装gcc_select。 为什么我收到这个警告和这个错误:Warning: port definitions are more than two weeks old, consider updating them by running 'port selfupdate'. Error: Insufficient privileges to write to MacPorts install prefix. ?【参考方案2】:

您可以在您的盒子上安装多个版本的 GCC,以选择您要使用的版本并使用完整路径调用它,例如而不是 g++ 在命令行上使用完整路径 /usr/bin/g++ (取决于您的 gcc 所在的位置)。

对于编译项目,这取决于您使用什么系统,我不确定 Xcode(我对默认 atm 很满意)但是当您使用 Makefiles 时,您可以设置 GXX=/usr/bin/g++ 等等。

编辑

现在有一个xcrun 脚本,可以查询该脚本以在 mac 上选择适当版本的构建工具。除了man xcrun,我还在谷歌上搜索了这个关于xcode and command line tools 的解释,其中几乎总结了如何使用它。

【讨论】:

【参考方案3】:

使用“gcc_select -l”

> gcc_select -l

gcc40 mp-gcc44

> gcc_select mp-gcc44

【讨论】:

【参考方案4】:

/usr/bin 中输入

sudo ln -s -f g++-4.2 g++

sudo ln -s -f gcc-4.2 gcc

应该可以的。

【讨论】:

/usr/bin/ 文件夹中创建链接是一个很大的禁忌。当事情变糟时,您最终将不得不重新安装整个操作系统【参考方案5】:

无论 Apple 作为 xcode 中的默认 gcc(10.6 上的 4.2.1,之前的 4.0.1)提供的任何内容都经过了苹果公司的良好测试(和维护),并且是在 OS X 上构建软件的“标准”。其他一切不是,所以如果你想开发软件或成为 gcc/OS X beta 测试人员,请三思而后行。

【讨论】:

...一年半之后,GCC 4.2 仍然是最新 Mac OS 上 XCode 中的标准。悲伤但真实。 John Zwinck:实际上,/usr/bin/gcc 是 llvm-gcc-4.2,整体编译策略显然是 llvm/clang。所以我不再期望在 gcc/OS X 方面发生太多事情了。 XCode 4.6 发行说明:“Xcode 4.6 是最后一个包含 LLVM-GCC 编译器和 GDB 调试器的版本。” developer.apple.com/library/mac/#releasenotes/DeveloperTools/…【参考方案6】:

我只是顺便说一下,使用软链接来实现这一点是一个可怕的、不好的、可怕的想法。

编写软件的关键之一是可重现性 - 您希望每次都能获得相同的结果。这些系统非常复杂,您希望减少所有不可见的错误来源。

拥有软链接是一个不可见的错误来源。这是你在一个月内会忘记的事情,然后转移到另一台机器上,想知道为什么你会得到不同的结果 - 或者,你会尝试升级你的系统,你会得到奇怪的错误,因为它不是期待那里的软链接。

此外,这并不能保证有效 - 特别是,尚不清楚您是否会获得正确的系统包含文件,这些文件在 gcc 的迭代之间肯定会发生变化。

gcc_select 是一种系统化的方式来做同样的事情,并且可以预测地工作,或者在最坏的情况下,您可以提交错误报告并获得最终修复或自己修复。

不幸的是 :-( gcc_select 不会影响 XCode 使用的编译器,因此如果您需要在 XCode 中工作(我这样做),这不是要走的路。我仍然不知道那可能是什么。

【讨论】:

可以在目标或项目设置中设置 XCode 使用的编译器(恐怕我不记得确切的位置)是编译器的路径。我需要改变它来编译一些库。【参考方案7】:

我知道这是一个旧请求。但它可能对某些人仍然有用。使用当前版本的 MacPorts,您可以使用 port 命令选择默认的 gcc 版本。 要列出 gcc 的可用版本,请使用:

$ sudo 端口选择 --list gcc

Available versions for gcc:
gcc42
llvm-gcc42
mp-gcc46
none (active)

将 gcc 设置为 MacPorts 版本:

$ sudo port select --set gcc mp-gcc46

【讨论】:

一定要先做sudo port install gcc_select。否则你会得到Error: The 'list' command failed: The specified group 'gcc' does not exist.【参考方案8】:

以下使用 Homebrew 的配方帮助我更新到 gcc/g++ 4.7:

$ brew tap SynthiNet/synthinet
$ brew install gcc47

在帖子 here 上找到它。

【讨论】:

【参考方案9】:

您可以手动安装 GCC

通过

sudo port install gcc46

或者您从here 的镜像之一下载源代码,例如here

tar xzvf gcc-4.6.0.tar.gz cd gcc-4.6.0 。/配置 制作

如果你有多个版本,那么你可以选择一个

port select --list gcc

记住 port 在 mac 上称为 macport https://www.macports.org/install.php 并将 bin 添加到您的路径中 export PATH=$PATH:/opt/local/bin

【讨论】:

以上是关于在 OSX 上更新 GCC的主要内容,如果未能解决你的问题,请参考以下文章

在 OS X 上设置 g++

缺少在 Mac OSX Lion/make 上安装 Qt

更新到 71.0 OSX 后,Firefox 下载随机失败

markdown 如何在OSX(Wine)上更新MTG Arena而无需重新下载所有内容

如何将 OSX 上的 Xcode 更新到最新版本?

如何在 Yocto 上安装 dlib 和更新 gcc