在OS X中以32位模式运行通用二进制文件
我有一个第三方库(这是和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重新编译一下,就能正常工作了。