Python ctypes 不在 Mac OS X 上加载动态库

标签 python linux macos ctypes dynamic-linking

我有一个 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

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

关于Python ctypes 不在 Mac OS X 上加载动态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3481508/

相关文章:

python - 我如何编写从一组图像创建电影的脚本?

jquery - Python 瓶形响应处理

python - PyTorch 数据加载器中的 "number of workers"参数实际上是如何工作的?

linux - 我可以在 Linux 上运行时修改程序的内存吗?

swift - 如何禁用 MacCatalyst 上的全屏按钮

macos - 由于 Mach-O header 中缺少 LC_VERSION_MIN,Mac App Store 分发的 Xcode 应用程序存档验证失败

python - 加载和解析具有多个 JSON 对象的 JSON 文件

带有 cookie 的 Python dryscrape 抓取页面

Linux TCP 接受无 SYN|ACK

linux - 仅当文件存在且仅当文件不存在时,如何在 linux 中执行打开系统调用?