python调用C函数库
python调用C函数库
(2012-10-31 13:47:50)
标签:
动态链接库c语言soctypespython |
分类:Python |
背景:工作中,有很多公共类库是使用C语言实现的。虽然可以将之编译成可执行的二进制文件,使用已熟知的commands模块获取shell命令行返回的结果;但是有些时候,所传的参数中含有shell命令中需要转义的字符(如,“$”),因此想到使用python直接调用C语言的函数库,省去了对字符串中特殊字符进行转义的麻烦。
.so文件的生成与使用
想要使用python调用C语言的函数,必须先将C程序编译生成.so文件。生成.so文件需要使用“gcc -shared”命令。
为了检测生成的.so文件的可用性,可以编写简单的C语言测试代码,常用的函数有:
void* handle = dlopen("xxx.so", RTLD_LAZY); //打开动态链接库,并赋值给handle句柄,供后续使用
myfunc = dlsym(handle, "func_name"); //获取动态链接库中的函数指针
dlclose(handle); //通过句柄关闭动态链接库
ctypes模块简介
python中,ctypes模块可以加载动态链接库,使用时,需要首先“from ctypes import *”。
常用的函数有:
libc = cdll.LoadLibrary("xxx.so") #加载.so动态链接库
libc.myfunc(...) #调用动态链接库中的函数
另,因python与C语言中的数据类型不同,对于string类型,在调用C链接库中的函数时,需要使用“c_char_p”对将字符串转换为标准C中的char*类型。
注:ctypes不支持C++的数据类型(如,C++中的string等)。
附,python和C数据类型对照表:
实例
1、首先创建一个具有标准C数据类型的参数和返回值的函数(函数体中可以包含C++数据类型的元素)。
为了避免C编译器修改函数的名字,使用extern "C" 来声明函数,如,
使用“nmxxx.so”命令可以查看xxx.so中的函数列表。
2、因python调用so动态链接库出core时不便于调试,在生成so文件后,首先编写一个简单的test.c来检测生成的.so文件的可用性:
3、编写python脚本调用动态链接库:
python调用C函数库相关推荐
- linux 下的动态库制作 以及在python 中如何调用 c 函数库
linux 下的动态库制作 以及在python 中如何调用 c 函数库 动态库: 动态库又称动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序 ...
- python中调用π的值_python如何调用math函数库求π值
python如何调用math函数库求π值 发布时间:2020-11-25 09:41:21 来源:亿速云 阅读:103 作者:小新 小编给大家分享一下python如何调用math函数库求π值,相信大部 ...
- python调用dll函数指针_python使用ctypes库调用DLL动态链接库
最近要使用python调用C++编译生成的DLL动态链接库,因此学习了一下ctypes库的基本使用. ctypes是一个用于Python的外部函数库,它提供C兼容的数据类型,并允许在DLL或共享库中调 ...
- python调用c++动态库 linux_linux中使用boost.python调用c++动态库的方法
前言 最近开始使用 robot framework 测试c++的动态库,robot framework 是跑在 windows 上面,c++动态库是跑在远程linux主机上面.测试办法是让 robot ...
- python调用c语言函数_从Python调用C函数
python调用c语言函数 We can call a C function from Python program using the ctypes module. 我们可以使用ctypes模块从P ...
- 一文读懂如何用python调用matlab函数(windows环境)
第一步配置环境: 要安装引擎 API,请在操作系统提示符下执行以下命令,其中 matlabroot 是 MATLAB 文件夹的路径.您可能需要管理员权限才能执行这些命令.或者,使用在非默认位置安装用于 ...
- Python调用C++ DLL库 ------OSError: [WinError 126] 找不到指定的模块。
Python调用C++ DLL库 解决Python中 OSError: [WinError 126] 找不到指定的模块 的问题. 一.问题: 在进行Python开发的过程中,很可能遇到调用C++ ...
- python 调用 javascript函数
python 调用 javascript函数 # pip install pyexecjs import execjs # 直接执行 print('execjs.eval:', execjs.eval ...
- python调用.net动态库
# python调用.net动态库 ### pythonnet简介 ----------------------------- - pythonnet是cpython的扩展 - pythonnet提供 ...
最新文章
- 输入框中默认的值,判断是否输入内容
- 西瓜书学习记录-绪论
- 2014-07-28 使用Axure RP进行手机端BBS的原型设计
- 深入V8引擎-Time核心方法之mac篇
- jsp中9个隐藏对象
- Ubuntu18.04安装“迅雷“
- flash 转 html5 工具_转
- java 取模运算_JAVA算术运算符_四则与取模
- python清华大学出版社答案_Python机器学习及实践
- excel转置怎么操作_Excel选择性粘贴,那些你不得不会的小技巧
- BZOJ[2827]千山鸟飞绝 线段树
- 绘画板绘-小白画线不稳怎么办?
- 余世维成功经理人讲座
- python绘图篮球_用Python把NBA球员投篮数据可视化
- 3万字智慧工业园区整体解决方案
- 【shell】shell 函数
- Kafka 消息可靠性
- Java实现二分法排序
- 苹果笔记本桌面下面的工具栏没了怎么调出来
- JavaScript中常见键盘事件以及BOM中window常用对象
热门文章
- self studying room list available at campus
- 免费OA系统品牌有那些?
- randomaccessfile在移动设备多线程多服务器下载时写入慢的问题
- JAVA截取字符串方法
- Django 1.10中更新modules同步数据库
- 由浅到深讲解C#-LINQ
- Quartz 2d绘图
- UML学习总结(1)——UML学习入门
- 务实云计算培训:帮您顺利走好云之旅
- Application Architecture Guide 2.0 (Chapter 7: Quality Attributes) Part 3