Mac OS-X Mountain Lion上的GCC-4.2错误,无法使用pip/virtualenv安装某些包

10
我遇到一个非常烦人的错误,不知道该怎么处理。这个问题似乎很普遍,我尝试了几乎所有能找到的解决方案,但都没有用。
我正在尝试使用pip安装库。这个问题出现在gevent、psycopg2和greenlet中。问题似乎是我的电脑找不到应该随XCode 4一起出现的特定C编译器:gcc-4.2。这里有一个示例(虽然也在virtualenv中进行了尝试)。
Last login: Sun Jul 29 23:35:54 on ttys000
*******s-MacBook-Pro:~ ******$ pip install gevent
Downloading/unpacking gevent
  Downloading gevent-0.13.7.tar.gz (288Kb): 288Kb downloaded
  Running setup.py egg_info for package gevent

Downloading/unpacking greenlet (from gevent)
  Downloading greenlet-0.4.0.zip (72Kb): 72Kb downloaded
  Running setup.py egg_info for package greenlet

Installing collected packages: gevent, greenlet
  Running setup.py install for gevent
    building 'gevent.core' extension
    gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -isysroot /Developer/SDKs/MacOSX10.6.sdk -arch i386 -arch x86_64 -g -O2 -DNDEBUG -g -O3 -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c gevent/core.c -o build/temp.macosx-10.6-intel-2.7/gevent/core.o
In file included from /Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/unicodeobject.h:4,
                 from /Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/Python.h:85,
                 from gevent/core.c:4:
/Developer/SDKs/MacOSX10.6.sdk/usr/include/stdarg.h:4:25: error: stdarg.h: No such file or directory
In file included from gevent/core.c:225:
gevent/libevent.h:9:19: error: event.h: No such file or directory
gevent/libevent.h:38:20: error: evhttp.h: No such file or directory
gevent/libevent.h:39:19: error: evdns.h: No such file or directory
gevent/core.c:361: error: field ‘ev’ has incomplete type
gevent/core.c:741: warning: parameter names (without types) in function declaration

....more like this but i'll skip it for now....

copying gevent/wsgi.py -> build/lib.macosx-10.6-intel-2.7/gevent

running build_ext

building 'gevent.core' extension

creating build/temp.macosx-10.6-intel-2.7

creating build/temp.macosx-10.6-intel-2.7/gevent

gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -isysroot /Developer/SDKs/MacOSX10.6.sdk -arch i386 -arch x86_64 -g -O2 -DNDEBUG -g -O3 -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c    gevent/core.c -o build/temp.macosx-10.6-intel-2.7/gevent/core.o

In file included from /Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/unicodeobject.h:4,

             from /Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/Python.h:85,

             from gevent/core.c:4:

/Developer/SDKs/MacOSX10.6.sdk/usr/include/stdarg.h:4:25: error: stdarg.h: No such file or directory

In file included from gevent/core.c:225:

gevent/libevent.h:9:19: error: event.h: No such file or directory

gevent/libevent.h:38:20: error: evhttp.h: No such file or directory

gevent/libevent.h:39:19: error: evdns.h: No such file or directory

....more like this as well....

gevent/core.c:15559: warning: assignment makes pointer from integer without a cast

gevent/core.c: At top level:

gevent/core.c:21272: error: expected ‘)’ before ‘val’

lipo: can't figure out the architecture type of:    /var/folders/xc/f2mg5kn96kqdr3tj19pgyhs00000gn/T//cckLxkJ2.out

error: command 'gcc-4.2' failed with exit status 1

Command /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python -c        "import setuptools;__file__='/Users/******/build/gevent/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record   /var/folders/xc/f2mg5kn96kqdr3tj19pgyhs00000gn/T/pip-yA5oWR-record/install-record.txt failed with error code 1 in /Users/******/build/gevent
Storing complete log in /Users/******/.pip/pip.log
***********s-MacBook-Pro:~ ******$ 

您可能会问:

1)您是否尝试使用virtualenv?

是的。我尝试将一个预先存在于/usr/bin/目录中的gcc建立符号链接,如下所示:

ln -s /usr/bin/gcc gcc-4.2
ln -s /usr/bin/gcc-4.2 gcc-4.2
ln -s /usr/bin/gcc gcc

这些方法都没有起作用。

2) 你尝试重新安装XCode了吗?

是的。

3) 你安装了XCode命令行工具吗?

是的。

4) 你确定已经安装了gcc吗?

**********s-MacBook-Pro:~ sanjay$ gcc
i686-apple-darwin11-llvm-gcc-4.2: no input files

5) Python 安装?

************s-MacBook-Pro:~ ******$ python
Python 2.7.3 (v2.7.3:70274d53c1dd, Apr  9 2012, 20:52:43) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

有什么想法是出了什么问题以及如何解决它吗?
我还尝试安装了这个:https://github.com/kennethreitz/osx-gcc-installer。我不知道还能尝试什么。当涉及到Unix编码/安装方面的事情时,我是一个新手,如果有些地方做得很糟糕,请指出。
谢谢!

似乎至少从10.6 MacOSX SDK加载文件存在故障:"/Developer/SDKs/MacOSX10.6.sdk/usr/include/stdarg.h"。 - user2665694
@Johnny 这篇文章是针对狮子操作系统写的:http://www.ahwkong.com/post/21914025778/followup-piece-of-gnu-gcc-4-2-issue-on-osx,不过我们看看它是否能解决你的问题。 - Anthony Kong
谢谢您发布这篇文章。我本来打算今晚升级我的系统,但现在我想我应该等一段时间:D - Thai Tran
5个回答

14

在虚拟环境中安装pycrypto时遇到了编译失败的问题。在此帖子中,发帖人jiaaro找到了解决方法: https://gist.github.com/3179227#gistcomment-379913

你需要安装Xcode 4.4(从应用商店获得),然后在 xcode 菜单 Xcode > Preferences(或按 Cmd + ,) 然后打开下载选项卡并安装命令行工具。

在Mac OSx Mountain Lion 10.8上,我已经安装了带有命令行工具的xCode 4.3。我升级到xCode 4.4,但仍然无法工作。显然,即使你已经安装了它们,xCode也不会自动下载新的命令行工具。正如jiaaro的帖子所述,您必须显式地再次下载命令行工具。

当前版本的gcc如下,并且可以成功使用sudo pip install在virtualenv中为我安装包,无需创建符号链接。

gcc

i686-apple-darwin11-llvm-gcc-4.2


1
我最终找到了一个解决方案,而你的就是它!干得好! - Johnny W
eschipul - 简明扼要并且彻底地解决了我的问题。谢谢! - Jeff C.

1
将这个环境变量设置为我所需要的,无需在Xcode或其下载上纠缠不清。
ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future

1

0

所以我已经解决了这个问题,但我有点像生活在西部荒野一样,现在修复问题并在事情出错时担心正确的方法。我只是创建了一个符号链接,使得 stdargs.h 位于一个合理的位置,在请求时可以看到它。

sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/stdarg.h /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/include/stdarg.h

你可能需要更改“MacOSX10.8.sdk”为你当前使用的版本。希望能帮到你。


2
这可能对你有用,但在我看来,盲目符号链接有些危险。它经常会在以后破坏事情。请参考eschipul获取最佳解决方案。 - Johnny W

0

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