Mac 10.6通用二进制scipy:未找到cephes/specfun“_aswfa”符号

2024-09-30 22:12:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我不能让scipy在32位模式下运行,当编译为i386/x86_64通用二进制文件并在我的64位10.6.2 MacPro1,1上执行时。在

我的python设置

this answer的帮助下,我构建了一个32/64位的intel universal binary of Python2.6.4,目的是使用arch命令在架构之间进行选择。(我设法用lipo为我想要的几个库制作了一些通用的二进制文件。)所有这些都可以。然后,我按照hyperjeff's article上的说明安装了scipy,只安装了更为更新的numpy(1.4.0),并且在安装scipy的过程中跳过了将numy移到一边的一点。在

现在,除了scipy之外的所有功能似乎都在工作,而且我确实可以使用arch -i386 pythonarch -x86_64 python在32位和64位模式之间进行选择。在

错误

Scipy在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.插值导入名为_cephes的内容,它查找名为_aswfa_的符号,但在32位模式下找不到它。在浏览scipy的源代码时,我在specfun.f中找到了一个ASWFA子例程斯派芬。所以但这两个和_塞菲斯似乎是通用二进制文件:

^{pr2}$

呵呵。我卡住了。我可能会尝试,但还没有弄清楚如何包括编译斯派芬。所以我自己,不知怎么的。在

我想scipy并不是所有32位机器都坏了,所以我猜我安装它的方式有问题,但我不知道是什么原因。在

考虑到我的独特之处,我真的不希望得到完整的答案但如果有人能给我指明方向,他们会非常感激的。在

(编辑)解决问题的更多详细信息:

我使用的是gfortran(gnufortran,来自gcc4.2.1appleinc.build5646)。在

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

scipy0.7.1的安装与here差不多,但它可以归结为一个简单的sudo python setup.py install。在

如果您查看带有nm的uCephes库,那么在i386体系结构中该符号确实是未定义的,正如David Cournapeau所建议的:

$ 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)

然而,我还不能解释它的缺失。在


Tags: inimportlibpackageslibrarysiteframeworkscipy
2条回答

你是如何安装scipy的?python版本是什么?用哪个fortran编译器?在

您可能还需要检查丢失的符号是否确实在两个拱门中(我不记得函数在哪里,但是您应该能够很容易地使用nm/otool的组合来找到ti)。在

你试过用macports编译scipy吗?在

sudo port install scipy +universal

(当然,您必须使用相同的选项编译链的其余部分,pythonpy26-numpy

我得到:

^{pr2}$

然后,您可以使用macports维护人员用于自己编译的设置和知识。在

相关问题 更多 >