我试图在Mac OSX 10.6.5上编译一个包。包的安装脚本依赖于distutils。问题是计算机的默认gcc是4.2版(我是通过在终端窗口中运行gcc--version来确定的),但是当我运行“python setup.py build”时,我从输出中看到distutils选择gcc-4.0而不是4.2,这是一个大问题,因为我使用的代码要求gcc>;=4.2。我在这台机器上没有管理员权限,因此作为解决方法,我创建了一些将gcc-4.0发送到gcc-4.2的符号链接。结果是代码编译,但是生成的.so文件不起作用(当我尝试用python导入它们时,我会收到错误,抱怨共享对象中缺少init函数)。
我试过在不同的mac(10.6.6)上编译这段代码,它的工作方式很有魅力:distutils选择4.2而不必被迫这样做,我可以毫无问题地导入生成的共享对象。所以,我想做的是在我的计算机上编译代码,而不必做这种符号链接技巧…我只想让distutils自动选择4.2。我已经尝试了正确编译.so文件并将其传输到我的计算机上,但是失败的原因有很多(它们链接到我的计算机上不存在的库/与安装的库不同的版本)。
这里有人有什么建议吗?
谢谢, 乔希
你不会说你使用的是哪种版本的Python,但是你使用的机器上的默认Python可能不是苹果提供的Python 2.6.1,更有可能是从Python.org安装的。尝试使用
/usr/bin/python2.6
运行构建脚本,该脚本应该是Apple提供的Python2.6;它确实使用gcc-4.2
。当您使用Python的Distutils(通常通过运行
setup.py
脚本或使用easy_install
)时,Distutils会尝试确保您正在安装的包中的任何C扩展模块都将使用与构建Python本身相同的编译器版本和兼容的编译选项(CPU arch、ABI等)进行编译。传统上,大多数用于OSX的python.org安装程序都提供一个通用的python,它可以在多个版本的OSX和多个CPU架构上工作。这就是为什么它们是用gcc-4.0构建的。如果需要将gcc-4.2用于其他库,那么最安全的方法是使用用gcc-4.2构建的Python。苹果在OSX10.6上提供的系统Pythons就是这样构建的。另外,对于Python的最新版本(2.7.1和3.2),Python.org为OS X 10.6提供了第二个OS X安装程序变体,它也是用gcc-4.2构建的。但是,如果您没有管理权限访问您的计算机,那无论如何都不是一个选项。您可以通过以下方式查看默认使用的python:
要强制distutils使用单独的编译器,可以通过环境重新定义一些变量。首先,找出distutils用作默认值的是什么:
接下来需要重新定义它们,替换要使用的gcc版本:
请记住,sysconfig默认值是从最初用于编译python的Makefile中提取的,因此使用它们进行篡改可能会产生意外的结果:
是否尝试设置自定义CC环境变量?
相关问题 更多 >
编程相关推荐