我有一个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库?
Python ctypes:使用函数指针时的windowsError
检查一个任意的用户是否在使用Python的pipe理员组中
删除加载的pyd文件
用Python获取电池容量windows
在Python中使用GetExtendedTcptable时出错
在Python中格式化驱动器
为什么我需要__declspec(dllexport)使一些function可以从ctypes访问?
从ctypes windll获取错误消息
返回一个结构 – 32位linux时与ctypes Segfault
如何检查指针在Python中是否为空?
不。 如错误消息所示,您的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 。
总结以上是内存溢出为你收集整理的Python的ctypes不加载在Mac OS X的dynamic库全部内容,希望文章能够帮你解决Python的ctypes不加载在Mac OS X的dynamic库所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)