3

ライブラリを使用するアプリケーションの中には、いくつかの SOの 質問からのアドバイスに従って、どちらか一方のアーチしかないものがあるため、32ビットアーキテクチャと64ビットアーキテクチャの両方でSciPyをコンパイルしようとしています。このコマンドは、約2か月前の同様のビルドで機能しましたが、コンパイルされた共有ライブラリの一部はx86_64のみを対象としているようです。

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

このコマンドのいくつかのバージョンを試しました。これには、FFlagssudoを含め、OSXコマンドラインツールを使用した環境変数の設定、完全なXcodeインストール、公式のSciPyインストール手順に従ってOSXに付属するLLVMの代わりにclangを使用したものが含まれます。 pipの代わりにeasy_installを実行したり、個別に./configureを実行したりすることもできますが、動作させることができないようです。奇妙なことに、いくつかの.soは両方のアーキテクチャで構築されていますが、そうでないものもあります。-m32 -m64

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

makeログを見ると、機能しているように見えるライブラリと機能していないライブラリの両方で、引数が正常に渡されているようです。

# 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 gfortranSciPyのドキュメントによると良いと思われるものを使用しました。重要な行は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でコンパイル)

4

1 に答える 1

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 だったようです。

于 2012-04-08T14:49:22.727 に答える