在OS X中以32位模式运行通用二进制文件

7 投票
2 回答
4608 浏览
提问于 2025-04-15 15:33

我有一个第三方库(这是和Xerox的有限状态工具的接口),它是以通用二进制文件的形式提供的,内部有两个版本:一个是PPC,一个是i386。我还为这个库提供了一个Python接口(使用ctypes)。

但是,当我尝试运行与Python接口一起提供的示例代码时,出现了一个错误,提示库的架构不对:

ImportError: dlopen(/Users/arne/sw/lib/libxcfsm.dylib, 10): 找不到合适的图像。发现了:
/Users/arne/sw/lib/libxcfsm.dylib: mach-o,但架构错误

根据我的理解,这是因为Python可执行文件内部有一个x86_64版本,除了我库中的两个版本外,它更倾向于在这个模式下运行。有没有办法让我强制Python可执行文件在某些脚本中启动i386版本,而不是x86_64版本?

2 个回答

3

如果你没有使用系统自带的Python,可以在你的 ~/.bash_profile 文件里加一行代码:

export VERSIONER_PYTHON_PREFER_32_BIT=yes
17

如果你在使用苹果系统自带的Python(在Snow Leopard上),你可以通过下面的方式来运行它:

arch -i386 python

例如:

robin-mbp:~ $ arch -i386 /usr/bin/python2.6 -c "import sys; print sys.maxint"
2147483647

这样可以以32位模式启动解释器。此外,你还可以设置一个环境变量来指定系统Python的使用(VERSIONER_PYTHON_PREFER_32_BIT)。

如果你使用的是自己编译的Python,目前在选择架构时有一个小问题,但如果你用来自这个链接的pythonw.c重新编译一下,就能正常工作了。

撰写回答