位置: 编程技术 - 正文

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实现使用剪贴板做复制与粘帖示例

  • 如何查询公司是否是小微企业
  • 印花税票是什么税种
  • 个体户也要做实收资本吗
  • 广告费的明细
  • 公司提供住宿员工在外居住出现问题
  • 小企业会计准则会计科目表
  • 营业利润为负数说明什么
  • 法人转钱到公户是借款还是投资款
  • 企业计提长期借款的利息
  • 财务怎么查询微信转账单号真假
  • 房产税怎么计算的
  • 自产自销税点
  • 降温费和取暖费标准
  • 公司清算补偿工资标准
  • 企业撤回投资说明模板怎么写
  • 外籍人士可以回国吗
  • 任务栏图标重叠一起
  • 物权请求权是什么意思
  • 系统托盘开不开
  • jquery怎么升级
  • 注销库存股的会计分录怎么理解
  • 企业房产税如何计算方法
  • thinkphp隐藏index.php
  • 持有至到期投资账务处理
  • node.js安装步骤
  • 如何使用axios直接发送GET请求
  • 准确率精确率
  • 礼品赠送纳税标准
  • 开了张增值税发票能退吗
  • 企业的工会经费可以用于什么地方
  • 打车费属于差旅费吗
  • 水果发票税率是几个点
  • 无发票的费用该谁承担
  • 什么情况下提供个人征信
  • 一般纳税人企业所得税怎么征收
  • 通过创建SQLServer 2005到 Oracle10g 的链接服务器实现异构数据库数据转换方案
  • 认缴制和实缴制的法律责任
  • sql server的数据库
  • 未开票收入如何记账
  • 开办费的最新账务处理会计视野
  • 出口单证不全如何申报退税
  • 开农贸市场拿补贴找哪个部门
  • 税前扣除凭证按照用途分为哪些
  • 接收商业承兑汇票有风险吗
  • 损益类科目有哪些借贷方向
  • 设备租赁公司怎么样
  • 别的公司代付货款
  • 无形资产入账价值包括费用化支出吗
  • 长期合同价格怎么定
  • 费用分析的作用
  • 存出保证金的账务处理
  • 五险怎么做账
  • sql server创建架构
  • mysql8.0存储过程
  • sqlserver清空所有表数据
  • mysql的全文索引的用处
  • windows命令行使用
  • ubuntu和window双系统
  • freebsd login
  • ubuntu configure
  • win7一直配置
  • win8 自动登录
  • win8取消自动更新
  • linux系统ll
  • css控制图片大小和宽度
  • css nowrap
  • unity 3d ui
  • 安卓压缩图片
  • JavaScript中的数据类型分为两大类
  • 浅谈javascript网页编码特效论文
  • unity3d初学者教程视频
  • javascript设计简单计算机
  • 二手车公司如何运营
  • 工会代扣代缴个税怎么申报
  • 山西税务12366
  • 购买房屋交契税
  • 买辆12万的车上路共需要多少钱
  • 20 百望九赋税控盘管理员默认指令多少?
  • 股息税怎么计算
  • 2015年购买15万元排量2.0的新车购置税怎么计算?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设