位置: 编程技术 - 正文

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

  • 应交增值税是什么意思
  • 一般纳税人销售货物税率
  • 解除劳动合同支付违约金合法吗
  • 个体工商户申报个税是按月按季度
  • 增值税一般纳税人税率
  • 企业出包工程预付的工程款
  • 待抵扣进项税什么时候抵扣
  • 设备配件定义
  • 企业所得税营业税金及附加包括
  • 一个公司控股另一个公司
  • 银行汇票分几种
  • 佣金是否要交所得税
  • 企业并购金额如何确定
  • 验资资金转出如何做账
  • 不是企业性质的民办学校要交什么税
  • 建安企业工资占比标准
  • 劳务费开发票还要代扣代缴吗?
  • 2021年沙子水泥税率是多少
  • 小规模企业所得税优惠政策最新2023
  • 企业转让无形资产要交增值税吗
  • 个人独资企业是什么意思
  • 股权投资损失怎么算出来的
  • 暂估入库价格高于实际价格怎么调整
  • 税务贷的用途
  • 买购物卡发福利怎么发
  • 跨年度所得税多怎么办
  • 销售价格调整
  • 发放给职工
  • 该设备正在使用中怎么关闭u盘
  • 北大新闻传播学院副院长
  • 广告费和业务宣传费
  • 如何用注册表
  • php判断为空的方法有哪些
  • php 生成缩略图
  • win10 热键
  • 期货公司保证金怎么算的
  • 切换到多任务界面
  • 增值税退税是否属于政府补助
  • 2021前端面试题校招
  • 企业在计提短期借款利息时可能用到的会计科目有
  • mongodb开启远程连接
  • 三方协议的
  • sql server 2008数据库密码忘记
  • 企业所得税退回应交税费会计分录
  • 企业所得税是哪种
  • 金融企业有
  • 应付账款账面价值扣除商业折扣吗
  • 劳务外经证预缴税款
  • 注册资本认缴制的利弊
  • 未确认融资费用是什么类科目
  • 支付给烟农的价格怎么算
  • 什么费用可以列入研发费用
  • 工伤医疗补助可以申请吗
  • 科目汇总表一张几行啊
  • 出口免税的税种包括
  • 预收账款最多挂几年
  • windows没有无线网络
  • centos 安装选择
  • freebsd11.3安装教程
  • windows更新驱动程序需要多久
  • centos7查看运行级别
  • win1020h2版好不好
  • ghost备份1678
  • 开机慢怎么解决 w8
  • win10正版和盗版区别大吗
  • debian怎么用
  • windows10快速操作在哪
  • loading and loading
  • layui框架中修改用户成功后怎么跳转到登录界面
  • 支持google play
  • 深入浅出Struts
  • vue拦截器的作用及使用
  • 简单的jquery插件实例
  • jquery可以实现哪些效果
  • javascript入门教学
  • jquery的核心理念
  • 全年上缴个人所得税多少
  • 国家河北税务局官网
  • 消费税申报详细流程图
  • 瑞典交税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设