位置: 编程技术 - 正文

Python调用C++程序的方法详解(python如何调用c程序)

编辑:rootadmin

推荐整理分享Python调用C++程序的方法详解(python如何调用c程序),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python 调用 c,python 调用 c,python调用c语言程序,python调用c++sdk,python调用c程序,python 调用 c,python调用c程序,python 调用c++程序,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

大家都知道Python的优点是开发效率高,使用方便,C++则是运行效率高,这两者可以相辅相成,不管是在Python项目中嵌入C++代码,或是在C++项目中用Python实现外围功能,都可能遇到Python调用C++模块的需求,下面列举出集中c++代码导出成Python接口的几种基本方法,一起来学习学习吧。

原生态导出

Python解释器就是用C实现,因此只要我们的C++的数据结构能让Python认识,理论上就是可以被直接调用的。我们实现test1.cpp如下

编译命令如下

运行Python解释器,测试如下

这里要注意一下几点

如果生成的动态库名字为test1,则源文件里必须有inittest1这个函数,且Py_InitModule的第一个参数必须是“test1”,否则Python导入模块会失败 如果是cpp源文件,inittest1函数必须用extern "C"修饰,如果是c源文件,则不需要。原因是Python解释器在导入库时会寻找initxxx这样的函数,而C和C++对函数符号的编码方式不同,C++在对函数符号进行编码时会考虑函数长度和参数类型,具体可以通过nm test1.so查看函数符号,c++filt工具可通过符号反解出函数原型

通过boost实现

我们使用和上面同样的例子,实现test2.cpp如下

其中BOOST_PYTHON_MODULE的参数为要导出的模块名字

编译命令如下

注意: 编译时需要指定boost头文件和库的路径,我这里分别是/usr/local/include和/usr/local/lib

或者通过setup.py导出模块

Extension的第一个参数为模块名,第二个参数为文件名

执行如下命令

这时会生成build目录,找到里面的test2.so,并进入同一级目录,验证如下

Python调用C++程序的方法详解(python如何调用c程序)

导出类

test3.cpp实现如下

注意:BOOST_PYTHON_MODULE里的.def使用方法有点类似Python的语法,等同于

编译命令如下

测试如下

导出变参函数

test4.cpp实现如下

这里Add和Del函数均采用了默认参数,Del为普通函数,Add为类成员函数,这里分别调用了不同的宏,宏的最后两个参数分别代表函数的最少参数个数和最多参数个数

编译命令如下

测试如下

导出带Python对象的接口

既然是导出为Python接口,调用者难免会使用Python特有的数据结构,比如tuple,list,dict,由于原生态方法太麻烦,这里只记录boost的使用方法,假设要实现如下的Python函数功能

即对传入的list每个元素计算平方,返回list类型的结果

代码如下

编译命令如下

测试如下

boost实现了boost::python::tuple, boost::python::list, boost::python::dict这几个数据类型,使用方法基本和Python保持一致,具体方法可以查看boost头文件里的boost/python/tuple.hpp及其它对应文件

另外比较常用的一个函数是boost::python::make_tuple() ,使用方法如下

总结

标签: python如何调用c程序

本文链接地址:https://www.jiuchutong.com/biancheng/380017.html 转载请保留说明!

上一篇:python中import学习备忘笔记(python import怎么用)

下一篇:python3+PyQt5实现使用剪贴板做复制与粘帖示例

  • 旧面包车能跑长途吗
  • 企业保持存货的必要性是什么
  • 会计核算是否健全 填错了有影响吗
  • 自然人城建税减半征收
  • 其他应付款是不是长期负债
  • 一般纳税人开专票几个点
  • 农林牧渔业项目概述怎么写
  • 低值易耗品摊销什么意思
  • 专用发票不抵扣怎么做分录
  • 应收贷方余额怎么处理
  • 收款收据是否可以做账
  • 募捐建议
  • 建筑业暂估成本表
  • 附加税水利行政事业是否取消?
  • 增值税普通发票有什么用
  • 会计里面红字冲销是什么意思
  • 母子公司之间支付的租赁费可以税前扣除么
  • 商业土地厂房办公房过户需要交什么税?
  • 海运费怎么做会计分录
  • 定期定额怎么报税
  • 有留抵怎么交增值税
  • 金税盘上传参数设置服务器设置
  • 其他公司垫付货款合法吗
  • 补缴纳以前年度企业所得税税率如何论定
  • pps影音怎么看电视直播
  • 房地产企业集团内部间的担保费可以税前扣除嚒
  • 单位代缴住房公积金分录
  • 默认网关不可用的解决办法
  • 材料成本差异贷方表示
  • 可变现净值高于成本计入当期损益吗
  • 分类账长什么样
  • 前端项目中遇到的问题,如何解决
  • php如何防止后门
  • php通过url传递参数
  • vue2路由跳转页面不刷新问题
  • transformer的解码器
  • 快速上手:华硕路由器的wireguard服务器
  • linux命令bzip2
  • 一般纳税人增值税怎么做账务处理
  • 台账如何做到表中分好几个表
  • 公司自有房产出租给员工如何处理
  • 开增值税专票要交税吗
  • mysql 随机取出一条
  • 其他收益属于什么类科目
  • 办公室装修 会计分录
  • 增值税发票跨月可以作废吗
  • 地补缴费额是什么
  • 研发费用固定资产如何入账
  • 工会经费网上怎么申报
  • 海外也不能避税吗
  • 公司购买的礼品卡怎么做账
  • 应收账款客户少付款怎么记账
  • 最新的会计规定出台时间
  • 货已经收到未收到怎么办
  • 财务建账应关注哪些内容
  • 财务预算编制方法包括
  • 新手学会计怎么学
  • sqlserver数据库备份
  • mssql server .ldf和.mdf的文件附加数据库的sql语句
  • 苹果15手机价格和图片颜色
  • 制作win7系统安装u盘系统
  • 电脑bios怎么设置usb启动
  • win7系统修复工具在哪
  • mac如何切换界面 快捷键
  • mac怎么修改图片格式jpg
  • winhlp32.exe - winhlp32是什么进程
  • url是什么格式的文件怎么打开
  • linux安装flash插件
  • macbookpro接听苹果手机电话
  • win10事件查看器好多错误
  • win10预览版桌面图标和任务栏不翼而飞怎么办?
  • win7系统里面怎么找到微信程序
  • 粒子冲突
  • opengl文档窗口是什么
  • csshtml经典案例
  • 圆形图表分析怎么做
  • 基于javascript的毕业设计
  • javascript的简介
  • Unity KillCount
  • 单位名称变更后发票还能用吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设