使用 --arch x86_64 选项编译 sip 时出现以下错误。

prosseek:siplib smcho$ python -c 'import sip; print sip'
Traceback (most recent call last):
  File "", line 1, in 
ImportError: dlopen(./sip.so, 2): no suitable image found.  Did find:
        ./sip.so: mach-o, but wrong architecture

我发现预构建的 Mac OS X python (snow leopard) 是通用的,并且它没有获得 64 位库。我猜它在 32 位模式下运行。

file /usr/bin/python 
/usr/bin/python: Mach-O universal binary with 3 architectures
/usr/bin/python (for architecture x86_64):      Mach-O 64-bit executable x86_64
/usr/bin/python (for architecture i386):        Mach-O executable i386
/usr/bin/python (for architecture ppc7400):     Mach-O executable ppc
prosseek:siplib smcho$ file sip.so
sip.so: Mach-O 64-bit bundle x86_64

如何强制 python 在 64 位模式下运行?当我在 Textmate 上运行相同的代码时,没有问题。所以,我认为 Textmate 无论如何都应该在 64 位模式下运行。

添加

  • 这个链接 展示如何识别我正在运行的 python 是 32 位还是 64 位。我检查了我的 python 是 32 位的。
  • 这个链接 展示如何制作 32/64 位 python。但这对我不起作用。
有帮助吗?

解决方案

尝试使用 拱门(1), ,并提供特定的 Python 版本:

arch -x86_64 /usr/bin/python2.6

实际上系统应该选择第一个适合你的架构。作为

$ file /usr/bin/python2.5
/usr/bin/python2.5: Mach-O universal binary with 2 architectures
/usr/bin/python2.5 (for architecture i386): Mach-O executable i386
/usr/bin/python2.5 (for architecture ppc7400):  Mach-O executable ppc

$ file /usr/bin/python2.6
/usr/bin/python2.6: Mach-O universal binary with 3 architectures
/usr/bin/python2.6 (for architecture x86_64):   Mach-O 64-bit executable x86_64
/usr/bin/python2.6 (for architecture i386): Mach-O executable i386
/usr/bin/python2.6 (for architecture ppc7400):  Mach-O executable ppc

如果说 python 以某种方式选择 2.5,那么您不能使用 64 位,但如果选择 2.6,则应自动选择 x86_64 变体,如下所述。如果是前者,请尝试获取 python_select 并将版本更改为2.6。

其他提示

好的,当你这样做时,真的很小心,它需要其他事情也是64位。突然间,如果mod_python不起作用,那么您需要重新编译Apache。然后是您的所有Python模块,如Tkinter / Tix。如果你像我一样的10.5,那就不要去那里,只是带着32位的东西。

如果您不知道 http://www.macports.org/ 请记住这是你的朋友。: - )

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top