2012-04-06 3 views
3

Я пытаюсь скомпилировать SciPy как для 32-битной, так и для 64-битной архитектуры, так как некоторые из приложений, которые используют библиотеку, являются только одной архитектурой или другими, следуя советам от SOquestions. Эта команда работает для меня в подобных сборках около двух месяцев назад, но теперь, кажется, что некоторые из скомпилированных разделяемых библиотек только нацеливание x86_64:Pip/easy_install игнорирует ARCHFLAGS в установке SciPy?

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

Я пробовал несколько версий этой команды, включая настройку переменных окружения до sudo, в том числе -m32 -m64 в FFlags, используя инструменты командной строки OSX, полную установку Xcode, используя clang вместо LLVM, который поставляется с OSX после official SciPy install instructions, easy_install вместо pip и даже ./configure'ing отдельно и т. д., но я не могу заставить его работать. Как ни странно, некоторые из .so является зданием с обеими архитектурами, но некоторые из них не:

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 

Глядя на журнале макияжа, это выглядит как арг, успешно прошел для обоего библиотек, которые, кажется, работают и те, что нет:

# 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, который я использую? Я использовал brew install gfortran, который должен быть хорошим в соответствии с документацией SciPy. Я бы подумал, что важной линией будет компилятор 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, компиляции с GCC из инструментов CLI и из Xcode)

ответ

3

вытягивать из источника и здания, кажется, правильно создать жир двоичных файлов. Я не уверен, что это ошибка, которая уже исправлена ​​(я ничего не видел в списке scipy dev), или если это связано с 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.