OS X Mountain Lion: gcc-4.2找不到文件或目录。

33

尝试在Mountain Lion上安装一个gem,但make找不到gcc-4.2:

kamil$ gem install posix-spawn -v '0.3.6'
Building native extensions.  This could take a while...
ERROR:  Error installing posix-spawn:
    ERROR: Failed to build gem native extension.

        /Users/kamil/.rbenv/versions/1.9.3-p0/bin/ruby extconf.rb
creating Makefile

make
compiling posix-spawn.c
make: gcc-4.2: No such file or directory
make: *** [posix-spawn.o] Error 1
4个回答

90

如果您已安装Xcode,则应该可以使用gcc。使用以下命令检查其位置:

kamil$ which gcc
/usr/bin/gcc

然后在用户环境下从gcc-4.2到普通的gcc建立符号链接:

kamil$ sudo ln -s ~/bin/gcc /usr/bin/gcc-4.2

通过在你的.bash_profile或者.zshrc中添加export PATH=...:$HOME/bin,确保用户绑定文件夹在你的路径中。

之后,宝石成功安装。


2
当你安装命令行工具时,为什么这不是默认设置,这让我感到困惑。我花了很多时间来尝试解决这个问题,最终找到了你的答案。这是一个Ruby问题还是一个Xcode问题,即使安装了gcc,这些操作也会失败? - Richard D
如果在尝试运行“ln -s /usr/bin/gcc /usr/bin/gcc-4.2”时出现“权限被拒绝”的错误:1)运行“sudo chmod 755 /usr/bin/gcc” 2)运行“sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2” - ATSiem
1
问题在于gcc版本可能并不是4.2。这只是一个解决方法,但这似乎是一个非常hacky的解决方案。按照@Piioo的建议,实际上使用homebrew安装正确版本的gcc可能会更好。 - caspian311
1
由于“系统完整性保护”,这将无法在任何现代OSX版本上运行。 - Artur Bodera
@fivenp 谢谢,我已经根据你的建议更新了我的答案,在用户空间创建了符号链接。 - ktusznio
显示剩余2条评论

14

使用Brew安装简单的apple-gcc42,它会生成gcc-4.2。

brew install apple-gcc42

因此,我们不需要符号链接,苹果更新可能会删除它们。

Homebrew


1
Brew 告诉我:“错误:没有名为“apple-gcc42”的可用配方”。 - Mr. Ronald

1
如@Artur Bodera所述,现代OSX将拒绝让您在系统的/bin文件夹中创建符号链接。为避免此问题,只需将符号链接创建到您的用户bin文件夹即可。
ln -s ~/bin/gcc /usr/bin/gcc-4.2

不要忘记将bin文件夹添加到您的.zshrc或.bash_profile中,例如:

export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:$HOME/bin

第一个命令给了我一个“操作不允许”的错误。目前我的.bash_profile文件中有“export PATH="/usr/local/bin:$PATH"”。更新它是否安全?我使用的是OSX 10.12.4。 - Alex Jose
苹果最新的MacOS版本中的系统完整性保护不允许您将符号链接创建到 /usr/bin,但是可以在 /usr/local/bin 中创建。 sudo ln -s /usr/bin/gcc /usr/local/bin/gcc-4.2 - Mr. Ronald

1

我在安装Python pip包(构建wheel失败)时遇到了类似的问题。我收到了相似的消息:

unable to execute '/usr/bin/gcc-4.2': No such file or directory
  error: command '/usr/bin/gcc-4.2' failed with exit status 1

/usr/bin/gcc-4.2链接到/usr/bin/gcc由于苹果系统完整性保护(SIP)的限制是不可能的,而将其链接到/usr/local/bin/gcc-4.2也没有被wheel构建过程选取;它仍然试图使用/usr/bin/gcc-4.2。我最终通过在终端中设置CC变量来解决这个问题。
CC=/usr/bin/gcc
# Install your packages
pip install -r requirements.txt

PS: 请注意,关闭SIP也无效,即使SIP被禁用,我也无法创建/usr/bin/gcc-4.2链接。


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