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步: 1、编写C/C实现程序。2、将C/C程序编译成动态库。-3、在Python中调用编译生成的库。Python在调用C/C程序时有一些不同,需要注意。 Python调用C语言程序比较简单,将C语言程序…...
[golang gin框架] 10.Gin 商城项目介绍
一.商城项目介绍 1.详细功能介绍图 2.数据库 ER 图 需要用到的数据表举例 二.MVC架构搭建以及执行流程分析 1.关于 MVC 模式的简单介绍 Gin 不是一个 MVC 的框架,所有的代码都可以写在 main.go 中。当我们的项目比较大的时候, 所有代码写在一个文件里面…...
Endor Labs:2023年十大开源安全风险
近日,Endor Labs发布了一份新报告,确定了2023年的十大开源安全风险。报告显示,许多软件公司依赖于开源软件代码,但在如何衡量和处理与开源软件相关的风险和漏洞方面缺乏一致性。调查发现,在应用程序中超过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中,所有的异常都有一个共同的父类:Throwable类。 Throwable类有两个重要的子类&#…...
Mac环境变量配置(Java)
1.打开终端: 2.输入命令:【/usr/libexec/java_home -V】,查看默认的jdk下载地址(绿色下划线的就是jdk默认路径)(注意⚠️:命令行终端是区分大小写的【-v 是不对的,必须是大写 -V】) …...
通过这三个文件彻底搞懂rocketmq的存储原理
前言 RocketMQ是阿里开发的一个高性能的消息队列,支持各种消息类型,而且支持事务消息,可以说是现在的很多系统中的香饽饽了,所以呢,怎么使用大家肯定是要学习的 我们作为一个有梦想的程序员,在学习一门技…...
Linux安装Nvidia显卡驱动
使用的Linux系统为 Ubuntu 18.04,显卡为GeForce RTX 3060 。 查看ubuntu版本号命令:sudo lsb_release -a 查看显卡型号命令:lspci | grep -i vga (详细查看方法: 查看显卡型号)。 下面是安装显卡驱动步…...
GPT-4 介绍
1 简介 本文根据openAI的2023年3月的《GPT-4 Technical Report 》翻译总结的。 原文地址:https://arxiv.org/pdf/2303.08774.pdf 原文确实没有GPT-4 具体的模型结构,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 的前世今生
目录标题前言🐳 Kubernetes到底是什么?🐬 K8s 的由来🐬K8s 的工作方式🐬 K8s 主要组件🐋Master 组件🐋Node 组件🐳 pod 是什么?🐬pod 的概念🐬控制…...
【基础篇】Java类加载器详解
类加载过程详解 类的生命周期 类从被加载到虚拟机内存到开始卸载出内存为止,生命周期可以简单概括为7个阶段:加载(Loading)、验证(Verification)、准备(Preparation)、解析ÿ…...
Pytorch动手实现Transformer机器翻译
Pytorch动手实现Transformer机器翻译前言一、环境配置1. torchtextMethod1:Method2:2. Spacy以en包下载为例:手动安装语言包到spacy3. NLTKMethod1:Method2:二、运行结果1. 模型训练(train)2. 翻…...
宝塔面板部署node+vue项目注意事项
宝塔面板部署nodevue项目注意事项 宝塔连接云服务器 如果服务器上没有安装宝塔面板,需要先安装,安装流程如下: 从宝塔官网主页进去,点击下载安装,然后点击在线安装 输入服务器IP和密码在服务器上安装宝塔面板 等待一…...
【LeetCode】剑指 Offer 39. 数组中出现次数超过一半的数字 p205 -- Java Version
题目链接:https://leetcode.cn/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/ 1. 题目介绍(39. 数组中出现次数超过一半的数字) 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可…...
fisco bcos用caliper0.2.0进行压力测试的安装配置
一、前期环境 1. 硬件 需要外网权限 2. 操作系统 版本要求:Ubuntu > 16.04, CentOS > 7, MacOS > 10.14 3. 基础软件 python 2.7,make,g,gcc,git sudo apt install python2.7 make g gcc git curl git confi…...
正在进行 | 用友企业数智化财务峰会落地广州 高能不断
3月28日,以「智能会计 价值财务」为主题的“2023企业数智化财务创新峰会”登陆广州。 此次用友企业数智化财务创新峰会,邀请了知名院校的专家学者、央国企等大型企业财务数智化领路人以及羊城权威媒体,近千人相约广州越秀国际会议中心,深度聚焦大型企业财务数智化创新应用…...
uniapp - APP云打包、蒲公英平台发布APP的步骤
一、uniapp 云打包 1、注册 dcloud 开发者 首先需要注册一个 dcloud 开发者的账号 dcloud开发者中心:登录 (dcloud.net.cn) 根据流程注册即可。 2、云打包(已安卓为例) 项目创建完成后,查看 dcloud 开发者中心,看是否…...
reposync命令详解--reposync同步aliyunyum库到本地
参考: reposync - 命令 - -桃枝夭夭- - 博客园 0. 简介 reposync 命令简单来说就是可以把指定外网源(repo id)的包同步到本地文件中 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…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
