Ubuntu22.04 下 pybind11 搭建,示例

Pybind11 是一个轻量级的库,用于在 C++ 中创建 Python 绑定。Ubuntu22下安装pybind11步骤如下:

1. 安装 pybind11

1.1 pip 命令安装

pip3 install pybind11

 1.2 源代码安装

安装依赖库:

sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/  pytest

运行命令:

git clone https://github.com/pybind/pybind11.git
cd pybind11
mkdir build
cd build
cmake ..
make -j4
sudo make install  

2.示例1:C++ 调用 Python 函数

add.py:

def add (a, b):
    return a + b

CMakeLists.txt:

#1.cmake verson,指定cmake版本

cmake_minimum_required(VERSION 3.2)

#2.project name,指定项目的名称,一般和项目的文件夹名称对应,声明一个cmake工程,工程名为cmakelist_test

PROJECT(pybind11_test)

# #也可以写上项目的版本号,如下所示

# project(cmakelist_test VERSION 0.1.0)

#3.添加c++ 11标准支持,如果程序中使用了C++11标准,则需要设置告诉编译器,没有可以不用写。

set( CMAKE_CXX_FLAGS "-std=c++17")

#4.设置编译器编译模式,对于编译用的Debug模式和调试用的Release模式,在Debug模式中,程序运行较慢,当可以在IDE中进行断点调试,而Release模式则速度较快,但没有调试信息。不设置默认是Debug模式。

set( CMAKE_BUILD_TYPE "Debug")

# 这行命令让 CMake 寻找 Python 3.6 版本(或更高)的库。REQUIRED 表示这个包是必需的;如果找不到,CMake 会报错。

find_package(PythonLibs 3.6 REQUIRED)

# 这行命令让 CMake 寻找 Pybind11 库。同样地,REQUIRED 表示 Pybind11 是构建此项目所必需的。

find_package(pybind11 REQUIRED )

# 这个命令用于向项目添加头文件搜索路径。

# 这里,${PYTHON_INCLUDE_DIRS} 和 ${pybind11_INCLUDE_DIRS} 是由 find_package 命令找到的 Python 和 Pybind11 的头文件目录。

# 这确保了编译器可以找到所有必需的头文件。

include_directories(${PYTHON_INCLUDE_DIRS})

include_directories(${pybind11_INCLUDE_DIRS})

#add executable file,添加要编译的可执行文件,编译main.cpp,生成可执行文件pybind11_test,也可以将pybind11_test写成${PROJECT_NAME},即为当前项目名称,就是#2中PROJECT(pybind11_test)的项目名字pybind11_test

add_executable(pybind11_test src/main.cpp)

# 指定了构建可执行文件 pybind11_test 时需要链接的库。

# ${PYTHON_LIBRARIES} 是 find_package(PythonLibs) 命令找到的 Python 库,

# 而 pybind11::pybind11 是 Pybind11 提供的目标,用于链接 Pybind11 库。这确保了项目在链接时能找到所有必要的库。

target_link_libraries(pybind11_test ${PYTHON_LIBRARIES} pybind11::pybind11)

编译成功后,在 build 文件夹下会出现 pybind11_test 文件,运行文件即可看到运行结果:

 

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

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

相关文章

一、Electron 环境初步搭建

新建一个文件夹,然后进行 npm init -y 进行初始化,然后我们在进行 npm i electron --save-dev , 此时我们按照官网的教程进行一个初步的搭建, 1.在 package.json 文件进行修改 {"name": "electron-ui","version…

【全开源】多功能投票小程序系统源码(ThinkPHP+FastAdmin+Uniapp)

🚀 多功能投票小程序,让决策变得更简单! 基于ThinkPHPFastAdminUniapp开发的多功能系统,支持图文投票、自定义选手报名内容、自定义主题色、礼物功能(高级授权)、弹幕功能(高级授权)、会员发布、支持数据库私有化部署&#xff0c…

Java项目如何外发告警日志到企业微信

前言 最近领导交代了一个需求,就是有些许客户不单单满足平台告警日志外发到邮箱、短信的形式,还要以消息聊天的形式外发给企业微信。 具体操作 1、注册企业微信。 2、登录企业微信,找到应用管理,创建应用。 3、创建完之后需要记录以下图片中两个值的信息。 4、然后记录下…

vue实现大语言模型返回的数据将代码高亮显示的实现

0. 引言 最近在学习ai大模型相关的东西,就想着自己做一个类似于chatGPT的网站,做到最后的时候代码块始终是不能高亮显示,以前一直搞Java没太了解过前端vue相关的东西,经过自己查资料,自己慢慢也是研究出来了。 这个项目…

RFID模块板子JY-LD6900通用自由口协议通信说明

RFID模块板子JY-LD6900是健永科技基于RFID无线射频识别技术推出的一款低频读卡模块,体积小巧,性能优越,读卡时间小于30ms,识别速度达2m/s,配套62mm直径圆形天线,读卡距离可达20cm以上。支持双频134.2kHz、1…

分享:618学习狂欢节活动来啦——大数据培训班

618狂欢学习节 限时优惠大放送 活动时间:6月1日—6月18日

商淘云电商分账系统如何为企业降低连锁财务成本

当今激烈的市场竞争中,连锁品牌企业面临着多样化的挑战,其中财务管理尤为关键。商淘云连锁收银系统作为一款专为连锁品牌量身定制的解决方案,不仅可以帮助企业实现总部入账管控财务、银行结算规范财务的目标,还能通过分账系统优化…

什么是SIEM

SIEM 解决方案是一种企业级应用程序,可集中和自动化与网络安全相关的操作,该工具通过收集、分析和关联从组织 IT 基础设施中的各种实体聚合的网络事件来帮助应对网络威胁。 与帮助监控和评估组织物理空间中的危险的监视控制台相比,SIEM解决方…

【漏扫工具】Afrog V3.0.6一款漏洞扫描神器

简介 [Afrog]是一款高性能的漏洞扫描器,快速稳定。它支持用户自定义的 PoC,并内置了多种类型,例如 CVE、CNVD、默认密码、信息泄露、指纹识别、未经授权的访问、任意文件读取和命令执行。借助 afrog,网络安全专业人员可以快速验证…

从一道题看利用sqlite打jdbc达到RCE

前言 从今年国赛的一道java题遇到了sqlite数据库去打jdbc达到RCE的姿势,故笔者写篇文章记下 复现 反编译源代码可以看见这三个数据库 这里提供了mysql sqlite psql 但mysql和psql都不行 这里我们用sqlite去打 jdbc就可以执行load_extension() CVE-2023-32697&#…

重磅就业报告前美股涨势消减,标普暂别纪录高位,英伟达盘中闪崩近6%,欧央行降息预期“退烧”,欧元跳涨

标普纳指创盘中历史新高后转跌,道指三连涨至近两周新高;芯片股指和台积电美股跌落纪录高位,英伟达三日收创历史新高后回落;游戏驿站盘中一度暴拉50%。中概股指回落,财报后蔚来收跌6.8%。欧央行会后,欧元盘中…

美颜SDK与直播美颜插件:开发者指南与优化技巧

本篇文章,小编将详细探讨如何利用美颜SDK和直播美颜插件进行开发,以及在实际应用中优化这些工具的技巧。 一、美颜SDK简介 美颜SDK这些功能通过复杂的图像处理算法实现,SDK的存在大大简化了开发者的工作,使他们无需从零开始编写…

项目3:从0开始的RPC框架

一. 基本概念 区别于传统的增删改查型的业务项目,本项目侧重于开发框架,并且涉及架构方面的技术知识点。 1. 什么是RPC? 远程过程调用(Remote Procedure Call),是一种计算机通信协议,它允许程…

GAT1399协议分析(10)--视频定义及解析

一、官方定义 二、字段解析 VideoID 类型BasicObjectID 解析参考GAT1399协议分析(8)--ImageInfo字段详解-CSDN博客 InfoKind 采集类型

小程序自定义marker弹出框教程

需求背景 微信小程序开发,需要使用腾讯地图显示自定义marker,并且点击marker后弹出自定义的customCallout,并且customCallout的内容为用户点击marker的时候再从后台接口获取数据。 百度了一圈后发现居然没有一篇文章可以一次性完成&#xf…

SSM旅游论坛(前后分离源码+论文)

该旅游论坛是基于Spring、SpringMVC、Mybatis框架开发出来的 用户信息管理 此页面提供给管理员的功能有:用户信息的查询管理,可以删除用户信息、修改用户信息、新增用户信息, 还进行了对用户名称的模糊查询的条件 景点信息管理 论坛类型管理…

医诊合作怎么避免减少双方损失,吸引更多的优质医疗资源下沉到基层?防漏费系统又起到什么作用?

健康领域的现代化治理要求在公共医疗卫生机构之间建立合作关系,然而我国公共医疗卫生服务领域呈现各级各类健康服务机构自由混合竞争的格局,这对公医分类分级诊疗法治秩序构成全面挑战,并成为影响转诊制度构建的重要因素.我国转诊制度的建设应以维护诊疗合作的法律秩序为前提,并…

帕友饮食小建议,健康美味两不误

亲爱的帕友们,大家好! 在忙碌的生活中,饮食健康往往是我们容易忽视的一环。作为帕友,我们更应该注重饮食的均衡与营养,让身体得到充分的滋养。今天,就来给大家分享一些帕友饮食的小建议,让我们…

项目工具|git相关

本博客暂时只作为个人资料,后续会进行完善,主要内容来自: 【【Git第一讲】:git分区与两个盒子的故事】 理解暂存区和未暂存区 git为什么要多一个暂存区?难道不能我把代码写完后就是未暂存区,然后直接提交…

VS2015安装模块时报错:安装包丢失或损坏,,,,,无效的驱动器

解决: 1、解压.iso文件; 2、替换目录 替换为解压后的对应的目录,点击重试即可。