2012-04-06 148 views
3

我试图为SciPy编译32位和64位体系结构,因为使用该库的一些应用程序只是一个拱形或另一个,遵循fewSOquestions的建议。这个命令已经在类似的建设工作,我大约两个月前,但现在看来,一些编译共享库都只是针对x86_64的:Pip/easy_install忽略SciPy安装中的ARCHFLAGS?

sudo ARCHFLAGS="-arch i386 -arch x86_64" pip install scipy

我试过这个命令的几个版本,包括在sudo之前设置环境变量,其中包括-m32 -m64在FFlags中,使用OSX命令行工具,完整的Xcode安装,使用clang代替official SciPy install instructions之后的OSX附带的LLVM,easy_install代替pip,甚至./configure'ing分开等,但我似乎无法得到它的工作。奇怪的是,一些公司用这两种架构建设。所以,但有些不是:

dhcp-10-249-71-202:~ kastman$ file /Library/Python/2.7/site-packages/scipy/optimize/*.so 
/Library/Python/2.7/site-packages/scipy/optimize/_cobyla.so: Mach-O 64-bit bundle x86_64 
/Library/Python/2.7/site-packages/scipy/optimize/_lbfgsb.so: Mach-O 64-bit bundle x86_64 
/Library/Python/2.7/site-packages/scipy/optimize/_minpack.so: Mach-O 64-bit bundle x86_64 
/Library/Python/2.7/site-packages/scipy/optimize/_nnls.so:  Mach-O 64-bit bundle x86_64 
/Library/Python/2.7/site-packages/scipy/optimize/_slsqp.so: Mach-O 64-bit bundle x86_64 
/Library/Python/2.7/site-packages/scipy/optimize/_zeros.so: Mach-O universal binary with 2 architectures 
/Library/Python/2.7/site-packages/scipy/optimize/_zeros.so (for architecture i386): Mach-O bundle i386 
/Library/Python/2.7/site-packages/scipy/optimize/_zeros.so (for architecture x86_64): Mach-O 64-bit bundle x86_64 
/Library/Python/2.7/site-packages/scipy/optimize/minpack2.so: Mach-O 64-bit bundle x86_64 
/Library/Python/2.7/site-packages/scipy/optimize/moduleTNC.so: Mach-O universal binary with 2 architectures 
/Library/Python/2.7/site-packages/scipy/optimize/moduleTNC.so (for architecture i386): Mach-O bundle i386 
/Library/Python/2.7/site-packages/scipy/optimize/moduleTNC.so (for architecture x86_64): Mach-O 64-bit bundle x86_64 

望着化妆日志,它看起来像正在成功地通过了这两个似乎工作的图书馆和那些ARGS不:

# Minpack doesn't build fat binaries 
/usr/local/bin/gfortran -Wall -Wall -undefined dynamic_lookup -bundle build/temp.macosx-10.7-intel-2.7/build/src.macosx-10.7-intel-2.7/scipy/optimize/minpack2/minpack2module.o build/temp.macosx-10.7-intel-2.7/build/src.macosx-10.7-intel-2.7/fortranobject.o build/temp.macosx-10.7-intel-2.7/scipy/optimize/minpack2/dcsrch.o build/temp.macosx-10.7-intel-2.7/scipy/optimize/minpack2/dcstep.o -L/usr/local/gfortran/lib/gcc/x86_64-apple-darwin11/4.6.2 -Lbuild/temp.macosx-10.7-intel-2.7 -lgfortran -o build/lib.macosx-10.7-intel-2.7/scipy/optimize/minpack2.so 
building 'scipy.optimize._slsqp' extension 
compiling C sources 
C compiler: clang -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64 -pipe 

#... but moduleTNC does. 
llvm-gcc-4.2 -Wl,-F. -bundle -undefined dynamic_lookup -Wl,-F. -arch i386 -arch x86_64 build/temp.macosx-10.7-intel-2.7/scipy/optimize/tnc/moduleTNC.o build/temp.macosx-10.7-intel-2.7/scipy/optimize/tnc/tnc.o -Lbuild/temp.macosx-10.7-intel-2.7 -o build/lib.macosx-10.7-intel-2.7/scipy/optimize/moduleTNC.so 
building 'scipy.optimize._cobyla' extension 
compiling C sources 
C compiler: clang -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64 -pipe 

是否有可能的差异是我使用的gfortran编译器?根据SciPy文档,我使用brew install gfortran,这应该是很好的。我认为重要的一行是C编译器:clang这条线看起来几乎是相同的,包括两个-arch的。

最后最详细的建设我已经试过了:

sudo env ARCHFLAGS="-arch i386 -arch x86_64" ARCH="i386 x86_64" CC="clang" CXX="clang" FFLAGS="-ff2c -m32 -m64" pip install scipy

有谁有关于如何进一步诊断此建议?

(OSX 10.7,最近的MacBookPro,从CLI工具和Xcode的GCC编译)

回答

3

从源代码和建设拉动似乎正确地创建脂肪的二进制文件。我不确定这是否是一个已经解决的错误(我没有在scipy开发列表中看到任何东西),或者它是否与pip/easy_install有关,但是这是我做得到的:

git clone https://github.com/scipy/scipy.git; cd scipy 
export ARCHFLAGS='-arch i386 -arch x86_64' 
python setup.py config 
python setup.py build 
sudo python setup.py install 

没有特殊的CC环境变量,gfortran来自brew install gfortran,令人惊讶的是它看起来像gcc是llvm-gcc。