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

2024-06-01 07:32:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个C++库^ {CD1>},我可以从下面的方式在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中的动态库,我需要做一些不同的事情吗?


Tags: importnumpyosmacasnp方式library
2条回答

这不仅仅是dylib中有哪些架构可用的问题,还关系到Python解释器运行在哪个架构中。如果您在OSX10.6中使用的是苹果提供的Python2.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

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

相关问题 更多 >