4

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

prosseek:siplib smcho$ python -c 'import sip; 打印啜饮'
回溯(最近一次通话最后):
  文件“”,第 1 行,在
ImportError: dlopen(./sip.so, 2): 找不到合适的图像。发现:
        ./sip.so: mach-o,但架构错误

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

文件 /usr/bin/python
/usr/bin/python:具有 3 种架构的 Mach-O 通用二进制文件
/usr/bin/python(用于架构 x86_64):Mach-O 64 位可执行 x86_64
/usr/bin/python(适用于 i386 架构):Mach-O 可执行 i386
/usr/bin/python(用于架构 ppc7400):Mach-O 可执行 ppc
prosseek:siplib smcho$ 文件 sip.so
sip.so:Mach-O 64 位捆绑 x86_64

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

添加

  • 此链接显示如何识别我正在运行的 python 是 32 位还是 64 位。我检查了我的 python 是 32 位的。
  • 此链接显示如何制作 32/64 位 python。但这对我不起作用。
4

2 回答 2

6

尝试使用arch(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。

于 2010-07-08T19:49:04.807 回答
1

好的,当你这样做时要非常小心,这将要求其他东西也是 64 位的。突然之间,如果 mod_python 不起作用,那么你需要重新编译 apache。然后是你所有的 python 模块,比如 tkinter/tix。如果您像我一样使用 10.5,请不要去那里,只需使用 32 位即可。

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

于 2010-07-08T19:57:37.413 回答