Mac 10.6 Универсальный бинарный scipy: символ cephes / specfun «_aswfa_» не найден

Я не могу заставить scipy функционировать в 32-битном режиме, когда он скомпилирован как универсальный двоичный файл i386 / x86_64 и выполнен на моем 64-битном 10.6.2 MacPro1,1.

Моя настройка Python

С помощьюэтот ответЯ создал 32/64 битный Intel Universal Python 2.6.4 с намерением использоватьarch Команда для выбора между архитектурами. (Мне удалось сделать несколько универсальных двоичных файлов из нескольких библиотек, которые я хотел использовать, используя lipo.) Все это работает. Затем я установил scipy в соответствии с инструкциями нашумиха, статья Ржеффа, только с более свежим numpy (1.4.0) и пропуском немного о перемещении numpy на короткое время во время установки scipy.

Теперь все, кроме scipy, кажется, работает, насколько я могу судить, и я действительно могу выбрать между 32 и 64-битным режимом, используяarch -i386 python а такжеarch -x86_64 python.

Ошибка

Сципи жалуется в 32-битном режиме:

$ arch -x86_64 python -c "import scipy.interpolate; print 'success'"
success
$ arch -i386 python -c "import scipy.interpolate; print 'success'"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/interpolate/__init__.py", line 7, in <module>
    from interpolate import *
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/interpolate/interpolate.py", line 13, in <module>
    import scipy.special as spec
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/special/__init__.py", line 8, in <module>
    from basic import *
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/special/basic.py", line 8, in <module>
    from _cephes import *
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/special/_cephes.so, 2): Symbol not found: _aswfa_
  Referenced from: /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/special/_cephes.so
  Expected in: flat namespace
 in /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/special/_cephes.so
Попытка отследить проблему

Похоже, scipy.interpolate импортирует то, что называется_cephes, который ищет символ под названием_aswfa_ но не могу найти его в 32-битном режиме. Просматривая источник Сципи, я нахожуASWFA подпрограмма в specfun.f. Единственный файл продукта scipy с похожим именем - это specfun.so, но и тот, и _cephes.so выглядят как универсальные двоичные файлы:

$ cd /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/special/
$ file _cephes.so specfun.so 
_cephes.so: Mach-O universal binary with 2 architectures
_cephes.so (for architecture i386): Mach-O bundle i386
_cephes.so (for architecture x86_64): Mach-O 64-bit bundle x86_64
specfun.so: Mach-O universal binary with 2 architectures
specfun.so (for architecture i386): Mach-O bundle i386
specfun.so (for architecture x86_64): Mach-O 64-bit bundle x86_64

Хо гул. Я застрял. Вещи, которые я могу попробовать, но еще не понял, как все же включить компиляцию specfun.so самостоятельно, каким-то образом.

Я полагаю, что scipy не работает на всех 32-битных машинах, поэтому я думаю, что что-то не так с тем, как я его установил, но я не могу понять, что именно.

Я не ожидаю полного ответа, учитывая мои довольно уникальные (?) Настройки, но если у кого-то есть какие-либо подсказки, которые могли бы указать мне правильное направление, они были бы очень благодарны.

(редактировать) Более подробная информация для решения вопросов:

Я использую gfortran (GNU Fortran от GCC 4.2.1 Apple Inc. сборка 5646).

Python 2.6.4 был установлен более или менее так:

cd /tmp
curl -O http://www.python.org/ftp/python/2.6.4/Python-2.6.4.tar.bz2
tar xf Python-2.6.4.tar.bz2
cd Python-2.6.4
# Now replace buggy pythonw.c file with one that supports the "arch" command:
curl http://bugs.python.org/file14949/pythonw.c | sed s/2.7/2.6/ > Mac/Tools/pythonw.c    
./configure --enable-framework=/Library/Frameworks --enable-universalsdk=/ --with-universal-archs=intel
make -j4
sudo make frameworkinstall

Scipy 0.7.1 был установлен почти так же, как описаноВот, но сводится к простомуsudo python setup.py install.

Действительно, может показаться, что символ не определен в архитектуре i386, если вы посмотрите на библиотеку _cephes сnmкак предложил Дэвид Курнапо:

$ nm -arch x86_64 /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/special/_cephes.so | grep _aswfa_
00000000000d4950 T _aswfa_
000000000011e4b0 d _oblate_aswfa_data
000000000011e510 d _oblate_aswfa_nocv_data
(snip)
$ nm -arch i386 /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/special/_cephes.so | grep _aswfa_
         U _aswfa_
0002e96c d _oblate_aswfa_data
0002e99c d _oblate_aswfa_nocv_data
(snip)

однако я пока не могу объяснить его отсутствие.

Ответы на вопрос(2)

Ваш ответ на вопрос