在Mac OS X Lion上使用GNU GCC 4.6(.1)编译器

4

我对这种开发方式还很陌生。想知道是否有人能指点一下方向。据我所见,使用MacPorts会出现错误导致无法使用。但是,我看到了这篇文章:http://beardedcodewarrior.net/2011/07/25/building-gcc-4-6-1-on-mac-os-x-lion/,但仍然无法成功。当我执行gcc的make命令时,需要超过3个小时才能完成,随后执行sudo make install,就可以成功安装,但是当我尝试执行“gcc --version”时,它仍然显示gcc版本为4.2.1(基于Apple公司构建版本5658)(LLVM构建版本2335.15.00)。我需要的是4.6.1版本!


1
哪个gcc?我认为你没有使用你编译的gcc。尝试指定完整路径。 - Dyno Fu
1
Dyno Fu 可能是对的。执行 which gcc 命令来查看你实际使用的是哪个。 - Adam Eberlin
你是否配置了GCC以安装在自定义位置?覆盖系统的GCC通常是一个坏主意(显然你没有这样做)。如果你已经配置它使用自定义安装位置,请查看该位置(例如/opt/bin或/usr/local/bin)是否包含“gcc”。 - user557219
3
由于Mac OS X默认使用bash而不是tcshcsh,我强烈建议使用bash内置命令type而不是whichwhich命令使用csh设置(例如.cshrc文件)来设置其搜索路径,而不是bash的设置(例如.profile.bashrc)。使用help type查看所有选项。 - Mike DeSimone
1个回答

3
有三种可能性:
  1. 它已经正确安装,并且已经进入了比之前的GCC安装更早的$PATH目录,但Bash的内部哈希表条目仍然指向旧的GCC。
  2. 它已正确安装,但进入了比您之前的GCC安装更晚的$PATH目录。
  3. 已经正确安装,但可执行文件的名称不是gcc
如果是情况#1,请运行命令hash -r,然后再试一次。为了避免频繁的$PATH查找,Bash使用哈希表将可执行文件名称映射到可执行文件位置。当您在$PATH中较早地安装一个具有与$PATH中较晚的相同名称的新可执行文件时,Bash不知道它。运行hash -r表示“清除哈希表”。或者,您可以运行hash -d gcc以表示“忘记哈希表中的gcc”。
如果是情况#2,则需要通过完整名称(例如/opt/local/bin/gcc)执行gcc,或者修改您的$PATH,使包含新gcc的目录早于现有gcc的目录。假设您正常安装了MacPorts,则应该已经为您完成了这项工作——MacPorts通过修改您的~/.bash_profile启动文件,将/opt/local/bin放在$PATH中早于/usr/bin
如果是情况#3,则需要找出可执行文件的名称。它几乎肯定是以gcc为前缀的名称,因此如果您键入gcc,然后按两次tab键,Bash将向您提供所有以gcc开头的命令列表。它很可能被命名为gcc-4.6gcc-mp-4.6之类的名称。

我建议在/usr/local中安装自定义gcc(通过给./configure加上--prefix=/usr/local标志),并检查您的$PATH以确保/usr/local/bin出现在/usr/bin之前。此外,要显示您的shell可以看到的所有 gcc,请使用命令type -a gcc,它将向您显示所有名为gcc的命令的路径。如果没有-a选项,它将只显示在命令行上键入gcc时将执行的命令。 - Mike DeSimone
好的,非常感谢你们迄今为止提供的帮助。我运行了type -a gcc命令并发现了两个版本。我想使用第二个版本,它位于/usr/local/bin/gcc中。当我执行/usr/local/bin/gcc -v时,它显示为4.6.1。我该如何修改我的$PATH文件,使其默认首选这个版本? - Bert B.
事实上,我修改了我的$PATH文件,它看起来像这样/usr/local/bin /usr/bin /bin /usr/sbin /sbin但是当我执行GCC --version时,我仍然有4.2.1版本。 - Bert B.
@Bert:which gcc 的输出是什么?你是否运行了 hash -r - Adam Rosenfield
哈哈,看看这个。我一个小时后回到电脑,现在它可以工作了。我甚至运行了hash -r多次,但都没有用。奇怪。现在它可以使用4.6.1版本了,感谢你和其他评论者的建议! - Bert B.

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