在OSX上更新GCC

66

我是一个新手程序员,刚在我的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”将其设置为默认版本呢?请告诉我相关的命令和信息。谢谢。

9个回答

63
如果您安装了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。 - Matt K
我已经做了那个,但是当我启动Python解释器时,我仍然看到GCC 4.0.1。 - philgo20
20
现在看来,列出版本的命令是port select --list gcc,设置版本的命令是port select --set gcc mp-gcc45(将mp-gcc45替换为你的版本)。你仍然需要安装gcc_select。 - tmandry
1
为什么我会收到这个警告和错误:警告:端口定义已经超过两周,考虑通过运行“port selfupdate”来更新它们。错误:没有足够的权限写入MacPorts安装前缀。 - user5779223
1
当我运行 port select --list gcc 时,它返回了 Available versions for gcc: none (active),尽管我知道我已经安装了两个版本的gcc,所以这并没有帮助到我。 - user124384
显示剩余2条评论

37

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

$ sudo port select --list gcc

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

设置gcc为MacPorts版本:

$ sudo port select --set gcc mp-gcc46


5
务必先执行 sudo port install gcc_select。否则你会收到 Error: The 'list' command failed: The specified group 'gcc' does not exist. 的错误信息。 - ulidtko

13

我来简单概括一下,使用软链接实现这一目的是一个糟糕的、不好的、可怕的想法。写软件的关键之一是可重现性 - 您希望每次都能得到相同的结果。这些系统非常复杂,您要尽量减少所有不可见的错误源。

软链接是一个不可见的错误源。它是那种你会在一个月内忘记的东西,然后移动到另一台机器上,想知道为什么会得到不同的结果 - 或者,你会尝试升级你的系统,但会出现奇怪的错误,因为它不希望在那里有软链接。

此外,这并不保证能够起作用 - 特别是,不清楚您是否会获取正确的系统包含文件,这些文件在gcc的各个版本之间肯定已经发生了变化。

gcc_select是一个可以预测地完成同样工作的系统化方法,或者在最坏的情况下,您可以提交 bug 报告并获得最终的修复方案,或自己修复。

不幸的是,gcc_select 不影响 XCode 使用的编译器,所以如果您需要在 XCode 中工作(我需要),这不是正确的方式。我仍然不知道什么是正确的方式。


你可以在目标或项目设置中设置XCode使用的编译器(恐怕我不记得具体在哪里了),其中包含编译器的路径。我需要更改它以编译某些库。 - 11684

3
以下是使用Homebrew更新到gcc/g++ 4.7的步骤:
$ brew tap SynthiNet/synthinet
$ brew install gcc47

在这里找到它 这里


2

使用命令 "gcc_select -l"

> gcc_select -l

gcc40 mp-gcc44

> gcc_select mp-gcc44

注:该命令用于选择编译器版本。以上内容为示例输出。

1

您可以在计算机上安装多个版本的GCC,要选择使用哪个版本,请在命令行中使用完整路径调用它,例如,不要使用g++,而是使用完整路径/usr/bin/g++(取决于您的gcc位于何处)。

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

编辑

现在有一个xcrun脚本,可以查询以选择适当版本的构建工具。除了man xcrun之外,我还在谷歌上找到了关于xcode和命令行工具的解释,这基本上总结了如何使用它。


0

您可以手动安装GCC

通过以下方式之一

sudo port install gcc46

或者你可以从这里的其中一个镜像下载源代码,例如这里

tar xzvf gcc-4.6.0.tar.gz cd gcc-4.6.0 ./configure make

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

port select --list gcc

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


0

/usr/bin 目录下输入以下命令:

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

sudo ln -s -f gcc-4.2 gcc

这样就可以了。


在您的 /usr/bin/ 文件夹中创建链接是绝对不可取的。当事情变得糟糕时,您最终将不得不重新安装整个操作系统。 - Guy

-8
无论是Apple在xcode中默认提供的gcc(在10.6上为4.2.1,在此之前为4.0.1),都经过苹果开发人员的充分测试(和维护),是在OS X上构建软件的“标准”。其他一切并非如此,因此如果你想开发软件或成为gcc / OS X beta测试人员,请三思而行。

5
一年半后,在最新的Mac OS上,XCode仍然使用GCC 4.2作为标准。悲哀而真实。 - John Zwinck
2
John Zwinck:实际上,/usr/bin/gcc是llvm-gcc-4.2,整体编译器策略明显是llvm/clang。因此,我不再期望在gcc/OS X方面发生太多变化。 - Frank Osterfeld
1
XCode 4.6 发布说明:"Xcode 4.6 是最后一个包含 LLVM-GCC 编译器和 GDB 调试器的版本。" https://developer.apple.com/library/mac/#releasenotes/DeveloperTools/RN-Xcode/ - Frank Osterfeld

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接