我有一个 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 加载动态库?
这不仅仅是 dylib 中可用的架构问题;这也与 Python 解释器运行的体系结构有关。如果您在 OS X 10.6 中使用 Apple 提供的 Python 2.6.1,则默认情况下它会在可能的情况下以 64 位模式运行。既然你说你的库是编译为 32 位的,那么你需要强制 Python 在 32 位模式下运行。对于 Apple 提供的 Python,一种方法是设置一个特殊的环境变量:
$ python -c "import sys; print sys.maxint"
9223372036854775807
$ export VERSIONER_PYTHON_PREFER_32_BIT=yes
$ python -c "import sys; print sys.maxint"
2147483647
参见苹果的man 1 python
了解更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)