python调用C++编译的动态库中的函数记录

news/2024/5/5 19:43:52/文章来源:https://blog.csdn.net/weixin_44312422/article/details/129997833

1. 引言

在深度学习模型部署上经常需要用到python来处理C++推理后的模型后处理部分,那么就可以用到pybind11来对C++代码封装成动态库,方便python进行后处理操作

本验证demo的文件组成:
在这里插入图片描述

2.pybind11准备

首先安装一下对应包:

pip install pytest

然后,下载pybind11的源码:

git clone https://github.com/pybind/pybind11.git

进入下载好的pybind11目录中,依次执行cmake和make操作:

mkdir build
cd build
cmake ..
cmake --build . --config Release --target check

3. 准备c++代码

这里提供一个官方的简单代码example.cpp:

#include <pybind11/pybind11.h>
namespace py = pybind11;int add(int i, int j) {return i + j;
}int sub(int i, int j) {return i *j;
}PYBIND11_MODULE(example, m) {m.doc() = "pybind11 example plugin"; // optional module docstringm.def("add", &add, "A function which adds two numbers");m.def("sub", &sub, "A function which subtracts two numbers");
}

4.CMakeLists.txt 制作

cmake_minimum_required(VERSION 3.10)
project(example)   add_subdirectory(pybind11)  # 添加一个子目录并构建该子目录 ,子目录下应该包含cmakelist.txt和代码文件
pybind11_add_module(example example.cpp)# pybind11 文件夹是在当前目录下CMakeLists.txt下的pybind11源码,并且经过cmake和make操作

5.执行编译,生成动态库so文件

在example.py 同级目录下,执行下面操作

mkdir build
cd build
cmake ..
make

6. test.py 示例代码

import exampleresult_1 = example.add(3,4)
print(result_1)
result_2 = example.sub(3,4)
print (result_2)

7. 将build文件中example.xxxx.so文件移至主目录

就可以执行test.py
得到结果:7,12

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_282445.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

凸优化学习笔记:等式约束凸优化问题的Newton方法、不可行初始点的Newton方法

文章目录凸优化学习笔记&#xff1a;等式约束凸优化问题的Newton方法、不可行初始点的Newton方法等式约束凸优化问题等式约束凸二次规划等式约束的Newton方法Newton方向&#xff1a;基于二阶近似的定义Newton减量&#xff1a;用于设计停止准则算法框架不可行初始点的Newton方法…

汇编实验4(99乘法表,整数分解,素数环,迷宫问题)【栈传参,递归,寻址方式】

目录 一、99乘法表 汇编代码 效果 二、整数拆分 问题描述 c代码 汇编代码 效果 三、素数环 问题描述 c代码 效果 四、迷宫问题 问题描述 c代码 汇编代码 效果 一、99乘法表 汇编代码 INCLUDE Irvine32.inc .data a db *,0 .code main PROC mov ebx,1;ebxi m…

从实际代码出发了解量子相位估计算法的原理

量子相位估计&#xff08;Quantum Phase Estimation, QPE&#xff09;是一种用于测量一个量子态的相位的算法。QPE算法的核心是一个相位估计电路&#xff0c;其中包含了一系列Hadamard变换、控制相位旋转门和逆量子傅里叶变换等量子门。其中&#xff0c;控制相位旋转门是QPE算法…

AI绘画热点模型大汇总,让你一次用个够

AI绘画热点模型大汇总&#xff0c;让你一次用个够 前段时间&#xff0c;在利用ControlNet重新定义你的AI姿势中提到了如何利用快捷方式节省谷歌硬盘&#xff0c;由于目前收集到的模型站点涉及的模型较少&#xff0c;且缺少lora模型。因此寻思着自己是不是也可以做一些热点模型…

【stable-diffusion】4090显卡下dreambooth、lora、sd模型微调的GUI环境安装(cuda驱动、pytorch、xformer)

相关博文 stable-diffusion-webui的基础功能手动安装&#xff0c;了解代码结构、依赖、模型出处 安装成功结果 主要参考 cuda11.7下载-https://developer.nvidia.com/cuda-toolkit-archivecudnn8.6 for 11.x : https://developer.nvidia.com/rdp/cudnn-archivedreambooth\lora…

Spring实战(开发Web应用)

开发Web应用展现信息构建领域类创建控制器类设计视图处理表单提交校验表单输入声明校验规则在表单绑定的时候执行校验展现校验错误视图控制器选择视图模板库小结展现信息 Taco Cloud是一个可以在线订购taco的地方。 Taco Cloud允许客户展现其创意&#xff0c; 能够让他们通过丰…

单点登录的认证过程,我拿到票据了, 可以卖肉了吗?

我拿到票据了, 可以卖肉了吗? SSO: 只能买一两, 不能再多了 单点登录的认证过程是如何的, 比方说单点登录服务D, 子系统A和B, A B D和浏览器之间是如何通信的 以下是单点登录&#xff08;SSO&#xff09;过程的详细步骤&#xff1a; 用户尝试访问子系统A。子系统A检查用户是否…

洛谷B2037奇偶数判断

洛谷B2037 题目描述 给定一个整数&#xff0c;判断该数是奇数还是偶数。如果 n 是奇数&#xff0c;输出 odd&#xff1b;如果 n 是偶数&#xff0c;输出 even。 输入格式 输入仅一行&#xff0c;一个整数 n。 输出格式 输出仅一行&#xff0c;如果n 是奇数&#xff0c;输出 o…

二分查找(二)

2.练习题 3&#xff09; 力扣https://leetcode.cn/problems/search-in-rotated-sorted-array-ii/这题需要分三种情况&#xff0c;第一种是区间有序&#xff0c;正常二分查找&#xff0c;第二种是区间 被旋转&#xff0c;左区间的值大于右区间&#xff0c;需要比较目标值和左区…

如何计算和提高客户生命周期价值 (LTV)

客户生命周期价值&#xff08;LTV或 CLV&#xff09;是衡量客户在其生命周期内为企业带来的总价值的关键指标。在电子商务中&#xff0c;LTV在决定企业的健康和成功方面起着至关重要的作用。LTV越高&#xff0c;业务的盈利能力和可持续性就越高。最常见的 LTV公式&#xff1a;L…

iphone distribution

未受信任的企业级开发者 通用 - VPN与设备管理 显示你下载的APP列表&#xff0c;点击进入 点击【信任xxxxx】

codeblocks20.3配置wxWidget3.2.2.1

codeblocks20.3 # 英文版自带gcc810&#xff0c;不汉化 wxWidget3.2.2.1 github下载源码 win11专业版 1.下载wxWidget3.2.2.1 源码 2.下载后解压到一个目录中&#xff0c;不要含中文和空格。我放在&#xff1a;d:\wxWidget3.2.2.1 3.打开终端cd build/msw 4.编译wxWidgets 为 …

多重背包问题 二进制优化 java 路径记录

多重背包---二进制拆分---java小知识_java多重背包问题_m78星云杰克的博客-CSDN博客 应该可以使用完全背包问题的记录路径的方法&#xff0c;例如&#xff0c;使用二维数组记录&#xff0c;记录当前硬币需要多少个

音视频骚操作,FFmpeg 如何播放带「图片」的 M3U8 视频,IJKPlyaer 适配非标 TS 文件

如果看到一个需要播放的视频链接显示是一张图片&#xff0c;你会不会感觉有点懵&#xff1f;如果这张图片写着 png&#xff0c;然后实际格式是 bmp &#xff0c;你会不会更懵了&#xff1f;如果这个 bmp 还做了加密篡改呢&#xff1f;今天我们要聊的就是这样一个充满骚操作的音…

css三角和css 用户见面样式,vertical-align 属性应用,溢出的文字省略号显示,常见布局技巧

目录 3.CSS三角 4.CSS 用户界面样式 4.1什么是界面样式 4.2轮廓线 outline 4.3 防止拖拽文本域 resize 5.vertical-align 属性 5.1图片,表单都属于行内块元素&#xff0c;默认的vertical-align 是基线对齐。 5.2解决图片底部默认空白缝隙问题 6.溢出的文字省略号显示 1.单…

linux centos7 查看端口占用命令netstat 报错提示 –bash:netstat:未找到命令解决方法

今天在一台centos7上用netstat命令看端口占用情况&#xff0c;提示 –bash:netstat:未找到命令&#xff1a; 解决方法&#xff1a; 输入 yum search ifconfig 查看这个命令是在 net-tools.x86_64里的&#xff1a; 然后安装这个包&#xff0c;输入 yum install net-tools 安装&…

ERTEC200P-2 PROFINET设备完全开发手册(2-1)

2. 入门指导&#xff1a;第一个PN IO设备 开发之前的准备&#xff0c;需要的软件&#xff1a; TIA Portal V16、V17串口终端软件 (MobaXterm或Putty或TeraTerm)Win10 并且安装64位JAVA运行环境J-Link的驱动软件Proneta&#xff08;推荐使用&#xff09; 需要准备的硬件 性能…

通信算法之130:软件无线电-接收机架构

1. 超外差式接收机 2.零中频接收机 3.数字中频接收机

洛谷B2033A*B问题

洛谷B2033 题目描述 输入两个正整数A 和B&#xff0c;求 AB 的值。注意乘积的范围和数据类型的选择。 输入格式 一行&#xff0c;包含两个正整数 A 和B&#xff0c;中间用单个空格隔开。1≤A,B≤50000。 输出格式 一个整数&#xff0c;即AB 的值 代码&#xff1a; #include&…

MySQL-双主高可用

目录 &#x1f341;拓扑环境 &#x1f341;配置两台MySQL主主同步 &#x1f343;修改MySQL配置文件 &#x1f343;配置主从关系 &#x1f343;测试主主同步 &#x1f341;keepalived高可用 &#x1f343;keepalived的安装配置 &#x1f343;master配置 &#x1f343;slave配置 …