Python的ctypes不加载在Mac OS X的dynamic库

我有一个C ++库repeater.so ,我可以在Linux中从Python加载以下方式:

 import numpy as np repeater = np.ctypeslib.load_library('librepeater.so', '.') 

但是,当我在Mac OS X(Snow Leopard,32位)上编译相同的库并获得repeater.dylib ,然后在Python中运行以下代码:

 import numpy as np repeater = np.ctypeslib.load_library('librepeater.dylib', '.') 

我得到以下错误:

 OSError: dlopen(/mydir/librepeater.dylib, 6): no suitable image found. Did find: /mydir/librepeater.dylib: mach-o, but wrong architecture 

在Mac OS X上,我是否需要做一些不同的工作才能在Python中加载dynamic库?

Solutions Collecting From Web of "Python的ctypes不加载在Mac OS X的dynamic库"

不。 如错误消息所示,您的python和librepeater.dylib文件之间存在体系结构不匹配。 使用file检查librepeater.dylib的体系结构是什么; 你的python将使用未列出的之一来构建。

这不仅仅是dylib中可用的体系结构的问题, Python解释器运行的体系结构也是一个问题。如果您在OS X 10.6中使用Apple提供的Python 2.6.1,则默认情况下,它将在可能的情况下以64位模式运行。 既然你说你的库被编译为32位,你需要强制Python以32位模式运行。 对于苹果提供的Python,一种方法是设置一个特殊的环境变量:

 $ python -c "import sys; print sys.maxint" 9223372036854775807 $ export VERSIONER_PYTHON_PREFER_32_BIT=yes $ python -c "import sys; print sys.maxint" 2147483647 

有关更多信息,请参阅Apple的man 1 python