当前位置: 首页 > news >正文

python调用CC++

python调用C程序

一般来说在python调用C/C++程序主要可以分为3步:

  • 1、编写C/C++实现程序。
  • 2、将C/C++程序编译成动态库。-
  • 3、在Python中调用编译生成的库。Python在调用C/C++程序时有一些不同,需要注意。

Python调用C语言程序比较简单,将C语言程序编译好,再使用python中的ctypes模块调用即可。

C语言源码called_c.c

#include<stdio.h>int foo(int a, int b){printf("a:%d, b:%d.", a,b);return 0;
}

编译

gcc -o libpycall.so -shared -fPIC called_c.c

生成libpycall.so动态库文件,之后就可以在Python中调用foo函数

python程序源码如下:

import ctypes
dll = ctypes.cdll.LoadLibrary
lib = dll('./libpycall.so') //刚刚生成的库文件的路径
lib.foo(1, 3)

运行既可以完成python中调用C程序

Python调用C++类

由于C++支持函数重载,在g++以C++方式编译时编译器会给函数的名称附加上额外的信息,这样ctypes模块就会找不到g++编译生成的函数。因此,要让g++按照C语言的方式编译才可以找到生成的函数名。让编译器以C语言的方式编译就要在代码中使用extern关键字将代码包裹起来。

C++源文件:cpp_called.cpp

//Python调用c++(类)动态链接库
#include <iostream>
using namespace std;class TestLib
{public:void display();void display(int a);
};
void TestLib::display() {cout<<"First display"<<endl;
}void TestLib::display(int a) {cout<<"Second display:"<<endl;
}#这里是中间的一个类,里面包含了对外提供的函数display和display_int
extern "C" {TestLib obj;void display() {obj.display();}void display_int(int a) {obj.display(a);}
}

在命令行或者终端输入编译命令:

g++ -o libpycallcpp.so -shared -fPIC cpp_called.cpp

生成libpycallcpp.so,在Python中调用。Python文件:py_call_c.py

import ctypes
dll = ctypes.cdll.LoadLibrary
lib = dll('./libpycallcpp.so') //刚刚生成的库文件的路径
lib.display()
lib.display_int(0)

结果

First display
Second display:0

这样就完成了python中调用C++程序了

相关文章:

python调用CC++

python调用C程序 一般来说在python调用C/C程序主要可以分为3步&#xff1a; 1、编写C/C实现程序。2、将C/C程序编译成动态库。-3、在Python中调用编译生成的库。Python在调用C/C程序时有一些不同&#xff0c;需要注意。 Python调用C语言程序比较简单&#xff0c;将C语言程序…...

[golang gin框架] 10.Gin 商城项目介绍

一.商城项目介绍 1.详细功能介绍图 2.数据库 ER 图 需要用到的数据表举例 二.MVC架构搭建以及执行流程分析 1.关于 MVC 模式的简单介绍 Gin 不是一个 MVC 的框架&#xff0c;所有的代码都可以写在 main.go 中。当我们的项目比较大的时候&#xff0c; 所有代码写在一个文件里面…...

Endor Labs:2023年十大开源安全风险

近日&#xff0c;Endor Labs发布了一份新报告&#xff0c;确定了2023年的十大开源安全风险。报告显示&#xff0c;许多软件公司依赖于开源软件代码&#xff0c;但在如何衡量和处理与开源软件相关的风险和漏洞方面缺乏一致性。调查发现&#xff0c;在应用程序中超过80%的代码可能…...

关于Error和Exception的一些思考 小结

目录 1. ERROR 2. Exception 2.1 checked Exception 2.2 unchecked Exception 2.3 区别 3. 内存溢出 3.1 堆溢出 3.2 永久代/元空间溢出 3.3 方法栈溢出 Java中&#xff0c;所有的异常都有一个共同的父类&#xff1a;Throwable类。 Throwable类有两个重要的子类&#…...

Mac环境变量配置(Java)

1.打开终端&#xff1a; 2.输入命令&#xff1a;【/usr/libexec/java_home -V】,查看默认的jdk下载地址&#xff08;绿色下划线的就是jdk默认路径&#xff09;&#xff08;注意⚠️&#xff1a;命令行终端是区分大小写的【-v 是不对的&#xff0c;必须是大写 -V】&#xff09; …...

通过这三个文件彻底搞懂rocketmq的存储原理

前言 RocketMQ是阿里开发的一个高性能的消息队列&#xff0c;支持各种消息类型&#xff0c;而且支持事务消息&#xff0c;可以说是现在的很多系统中的香饽饽了&#xff0c;所以呢&#xff0c;怎么使用大家肯定是要学习的 我们作为一个有梦想的程序员&#xff0c;在学习一门技…...

Linux安装Nvidia显卡驱动

使用的Linux系统为 Ubuntu 18.04&#xff0c;显卡为GeForce RTX 3060 。 查看ubuntu版本号命令&#xff1a;sudo lsb_release -a 查看显卡型号命令&#xff1a;lspci | grep -i vga &#xff08;详细查看方法&#xff1a; 查看显卡型号&#xff09;。 下面是安装显卡驱动步…...

GPT-4 介绍

1 简介 本文根据openAI的2023年3月的《GPT-4 Technical Report 》翻译总结的。 原文地址&#xff1a;https://arxiv.org/pdf/2303.08774.pdf 原文确实没有GPT-4 具体的模型结构&#xff0c;openAI向盈利组织、非公开方向发展了。也没透露硬件、训练成本、训练数据、训练方法等…...

Ubuntu下单机安装Hadoop详细教程(附所需安装包下载)

目录 前言 一、创建Hadoop用户 二、更新apt和安装Vim编辑器 三、安装SSH和配置SSH无密码登录 四、安装Java环境 1. 安装JDK 2. 配置JDK环境 3. 检验安装 五、安装单机Hadoop 1. 下载安装Hadoop 2. 运行示例 总结 前言 本文安装的 Hadoop 及 Java 环境基于林子雨老…...

【嵌入式烧录/刷写文件】-2.1-详解Intel Hex格式文件

目录 1 什么是Intel Hex 2 Intel Hex的格式 2.1 Intel Hex的Record结构 2.1.1 “Record type记录类型”的说明 2.1.2 “Record length记录长度”的说明 2.1.3 如何计算“Checksum校验和” 2.2 Record order记录顺序 2.3 Text line terminators文本行终止符 3 Hex文件的…...

【云原生】初识 Kubernetes — pod 的前世今生

目录标题前言&#x1f433; Kubernetes到底是什么&#xff1f;&#x1f42c; K8s 的由来&#x1f42c;K8s 的工作方式&#x1f42c; K8s 主要组件&#x1f40b;Master 组件&#x1f40b;Node 组件&#x1f433; pod 是什么&#xff1f;&#x1f42c;pod 的概念&#x1f42c;控制…...

【基础篇】Java类加载器详解

类加载过程详解 类的生命周期 类从被加载到虚拟机内存到开始卸载出内存为止&#xff0c;生命周期可以简单概括为7个阶段&#xff1a;加载&#xff08;Loading&#xff09;、验证&#xff08;Verification&#xff09;、准备&#xff08;Preparation&#xff09;、解析&#xff…...

Pytorch动手实现Transformer机器翻译

Pytorch动手实现Transformer机器翻译前言一、环境配置1. torchtextMethod1&#xff1a;Method2&#xff1a;2. Spacy以en包下载为例&#xff1a;手动安装语言包到spacy3. NLTKMethod1&#xff1a;Method2&#xff1a;二、运行结果1. 模型训练&#xff08;train&#xff09;2. 翻…...

宝塔面板部署node+vue项目注意事项

宝塔面板部署nodevue项目注意事项 宝塔连接云服务器 如果服务器上没有安装宝塔面板&#xff0c;需要先安装&#xff0c;安装流程如下&#xff1a; 从宝塔官网主页进去&#xff0c;点击下载安装&#xff0c;然后点击在线安装 输入服务器IP和密码在服务器上安装宝塔面板 等待一…...

【LeetCode】剑指 Offer 39. 数组中出现次数超过一半的数字 p205 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/ 1. 题目介绍&#xff08;39. 数组中出现次数超过一半的数字&#xff09; 数组中有一个数字出现的次数超过数组长度的一半&#xff0c;请找出这个数字。 你可…...

fisco bcos用caliper0.2.0进行压力测试的安装配置

一、前期环境 1. 硬件 需要外网权限 2. 操作系统 版本要求&#xff1a;Ubuntu > 16.04, CentOS > 7, MacOS > 10.14 3. 基础软件 python 2.7&#xff0c;make&#xff0c;g&#xff0c;gcc&#xff0c;git sudo apt install python2.7 make g gcc git curl git confi…...

正在进行 | 用友企业数智化财务峰会落地广州 高能不断

3月28日,以「智能会计 价值财务」为主题的“2023企业数智化财务创新峰会”登陆广州。 此次用友企业数智化财务创新峰会,邀请了知名院校的专家学者、央国企等大型企业财务数智化领路人以及羊城权威媒体,近千人相约广州越秀国际会议中心,深度聚焦大型企业财务数智化创新应用…...

uniapp - APP云打包、蒲公英平台发布APP的步骤

一、uniapp 云打包 1、注册 dcloud 开发者 首先需要注册一个 dcloud 开发者的账号 dcloud开发者中心&#xff1a;登录 (dcloud.net.cn) 根据流程注册即可。 2、云打包&#xff08;已安卓为例&#xff09; 项目创建完成后&#xff0c;查看 dcloud 开发者中心&#xff0c;看是否…...

reposync命令详解--reposync同步aliyunyum库到本地

参考: reposync - 命令 - -桃枝夭夭- - 博客园 0. 简介 reposync 命令简单来说就是可以把指定外网源&#xff08;repo id&#xff09;的包同步到本地文件中 1. 安装 reposync 命令 [rootV10SP1-1 ~]# yum install -y dnf-plugins-core2. 常用选项以及参数 选项含义-c [fil…...

OCR之论文笔记TrOCR

文章目录TrOCR: Transformer-based Optical Character Recognition with Pre-trained Models一. 简介二. TrOCR2.1. Encoder2.2 Decoder2.3 Model Initialiaztion2.4 Task Pipeline2.5 Pre-training2.6 Fine-tuning2.7 Data Augmentation三. 实验3.1 Data3.2 Settings3.2 Resul…...

雷电4模拟器安装xposed框架(2022年)

别问我都2202年了为什么还在用雷电4安卓7。我特么哪知道Xposed的相关资料这么难找啊&#xff0c;只能搜到一些老旧的资料&#xff0c;尝试在老旧的平台上实现了。 最初的Xposed框架现在已经停止更新了&#xff0c;只支持到安卓8。如果要在更高版本的安卓系统上使用Xposed得看看…...

微信小程序支付完整流程(前端)

微信小程序中&#xff0c;常见付款给商家的场景&#xff0c;下面列出企业小程序中&#xff0c;从0起步完整微信支付流程。 一&#xff0c;注册微信支付商户号&#xff08;由上级或法人注册&#xff09; 接入微信支付 - 微信商户平台 此商户号&#xff0c;需要由主管及更上级领导…...

设置鼠标右键打开方式,添加IDEA的打开方式

一、问题描述 已下载IDEA&#xff0c;但是右键打开之前保存的项目文件&#xff0c;无法显示以IDEA方式打开。 二、解决步骤 1. 打开注册表 winR键输入regedit 2、查找路径为计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell &#xff08;我找了半天没看到Class…...

LAMP架构之zabbix监控(2):zabbix基础操作

目录 一、zabbix监控节点添加和删除 &#xff08;1&#xff09;手动添加 &#xff08;2&#xff09;自动添加 &#xff08;3&#xff09;按照条件批量添加 &#xff08;4&#xff09;使用api工具进行管理 二、针对应用的zabbix监控 一、zabbix监控节点添加和删除 实验说明&a…...

ShareSDK常见问题

QQ-分享报错901111&#xff0c;9001010等 由于QQ现在需要审核后才可以分享&#xff08;之前分享不需要审核&#xff09;&#xff0c;所以此错误解决方法只需通过腾讯开放平台的审核即可&#xff0c;另外要检查注册好的应用的基本信息&#xff0c;包名、md5签名和Bundle id是不…...

[Spring]一文明白IOC容器和思想

✅作者简介&#xff1a;大家好,我是Philosophy7&#xff1f;让我们一起共同进步吧&#xff01;&#x1f3c6; &#x1f4c3;个人主页&#xff1a;Philosophy7的csdn博客 &#x1f525;系列专栏&#xff1a; 数据结构与算法 &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃…...

程序人生 | 与足球共舞的火柴人(致敬格拉利什,赋予足球更深的意义)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;也会涉及到服务端 &#x1f4c3;个人状态&#xff1a; 在校大学生一枚&#xff0c;已拿多个前端 offer&#xff08;秋招&#xff09; &#x1f680;未…...

MATLAB | R2023a更新了哪些好玩的东西

R2023a来啦&#xff01;&#xff01;废话不多说看看新版本有啥有趣的玩意和好玩的特性叭&#xff01;&#xff01;把绘图放最前面叭&#xff0c;有图的内容看的人多。。 1 区域填充 可以使用xregion及yregion进行区域填充啦&#xff01;&#xff01; x -10:0.25:10; y x.^…...

Python Module — OpenAI ChatGPT API

目录 文章目录目录OpenAI Python SDKopenai.ChatCompletion 模块openai.ChatCompletion.create 函数OpenAI Python SDK 官方文档&#xff1a;https://platform.openai.com/docs/api-reference/introduction OpenAI Python SDK 用于开发与 OpenAI RESTful API 进行交互的客户端…...

Docker学习记录

阅读前请看一下&#xff1a;我是一个热衷于记录的人&#xff0c;每次写博客会反复研读&#xff0c;尽量不断提升博客质量。文章设置为仅粉丝可见&#xff0c;是因为写博客确实花了不少精力。希望互相进步谢谢&#xff01;&#xff01; 文章目录阅读前请看一下&#xff1a;我是一…...

商城网站制作报价/今日小说排行榜百度搜索榜

scan,single client access name。简单客户端连接名&#xff0c;这是一个唯一的名称&#xff0c;在整个公司网络内部唯一&#xff0c;并且在DNS中可以解析为三个ip地址&#xff0c;客户端连接的时候只需要知道这个名称&#xff0c;并连接即可。下面是我rac 环境中的hosts 。 […...

福永做网站/免费网站申请域名

新春佳节&#xff0c;万家团圆&#xff0c;预祝大家在新的一年里&#xff0c;阖家康泰&#xff0c;万事如意。 回顾过去的2017年&#xff0c;时光飞逝&#xff0c;忙忙碌碌&#xff0c;总结如下&#xff1a; 1、《高性能SQL调优精要与案例解析》一书顺利出版&#xff0c;感谢各…...

安庆做网站/网络营销有什么方式

一、BeautifulSoup库简介BeautifulSoup是一个灵活方便的网页解析库&#xff0c;处理搞笑&#xff0c;支持多种解析器。利用它可以不用编写正则表达式就可以方便的实现网页信息的抓取。BeautifulSoup是爬虫必学技能&#xff0c;其最主要的功能是从网页抓取数据。BeautifulSoup自…...

网站客服系统软件/哈尔滨seo网站管理

威纶通触摸屏怎么实现批量数据监视(三菱、西门子问题汇总)三菱常见问题解答1:通讯参数是8位数据位&#xff0c;偶校验&#xff0c;1位停止位&#xff0c;波特率19200&#xff0c;无帧头无帧尾&#xff0c;无协议模式&#xff0c;那么D8120多少?答&#xff1a;数据位&#xff1…...

上海城隍庙门票多少钱/娄底地seo

讲述 | 余承东 编辑 | HiEV 从2月到3月&#xff0c;网络上关于华为、问界和AITO的疑问讨论不断。先是在2月&#xff0c;华为将AITO宣传物料中的主要品牌替换成了「 HUAWEI问界」。 随后在华为年报会上&#xff0c;轮值董事长徐直军又指出&#xff1a;「有的个人、部门或者合作…...

更改wordpress网站的url/seo优化专家

笔记07 5. ArrayList类 功能&#xff1a;创建长度可变的数组。 导包&#xff1a;同样在java.util中 ArrayList中的是泛型。泛型只能是引用类型&#xff0c;不能是基本类型注意事项 对于ArrayList集合来说&#xff0c;直接打印得到的不是地址值&#xff0c;而是内容。如果内容…...