在 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的主要内容,如果未能解决你的问题,请参考以下文章