c++打包pyd文件给Python使用调用函数

C语言源码:

simplemath.cpp代码:

//
// Created by ASFOR on 2025/9/11.
//
#include <pybind11/pybind11.h>namespace py = pybind11;// 一个简单的加法函数
int add(int a, int b) {return a + b;
}// 一个简单的乘法函数
int multiply(int a, int b) {return a * b;
}// 定义 Python 模块
PYBIND11_MODULE(simplemath, m) {m.doc() = "A simple math module written in C++";m.def("add", &add, "Add two numbers");m.def("multiply", &multiply, "Multiply two numbers");
}
CMakeLists.txt代码如下:
cmake_minimum_required(VERSION 3.28)
project(simplemath)set(CMAKE_CXX_STANDARD 17)# pybind11 include 路径
include_directories("E:/Users/29165/AppData/Roaming/Python/Python313/site-packages/pybind11/include")# Python include 和 libs
include_directories("D:/software/Python/Python313/include")
link_directories("D:/software/Python/Python313/libs")# 编译成 Python 扩展模块
add_library(simplemath MODULE simplemath/simplemath.cpp)# Windows 下生成 .pyd 而不是 .dll
set_target_properties(simplemath PROPERTIESPREFIX ""SUFFIX ".pyd"
)# 链接 Python 库
target_link_libraries(simplemath python313)
pyproject.toml代码如下:
[build-system]
requires = ["setuptools", "wheel", "pybind11>=2.6.0"]
build-backend = "setuptools.build_meta"

setup.py代码如下:

from setuptools import setup, Extension
import pybind11ext_modules = [Extension("simplemath",                            # Python 导入模块名["simplemath/simplemath.cpp"],           # C++ 源文件路径include_dirs=[pybind11.get_include()],  # pybind11 头文件language="c++",),
]setup(name="simplemath",version="0.1",author="Your Name",description="A simple C++ extension for Python",ext_modules=ext_modules,zip_safe=False,
)

生成文件夹目录

其中pyd为可执行引用的Python代码。

调用时的代码:

import sys# 添加 .pyd 文件所在目录
sys.path.append(r"E:\Pycharmproject\pythonProject1\pyd")# 导入模块
import simplemath# 调用函数
print(simplemath.add(3, 5))
print(simplemath.multiply(4, 6))

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

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

相关文章

hadoop的api操作对象存储

一、获取文件或目录1. 获取某个目录下的文件// 必须的依赖 import org.apache.hadoop.conf.Configuration import org.apache.hadoop.fs.{FileSystem, LocatedFileStatus, Path, RemoteIterator}// 获取某个目录下的文件路径 def list_file(conf: Configuration, dir_path: Str…

《UE5_C++多人TPS完整教程》学习笔记52 ——《P53 FABRIK 算法(FABRIK IK)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P53 FABRIK 算法&#xff08;FABRIK IK&#xff09; 的学习笔记&#xff0c;该系列教学视频为计算机工程师、程序员、游戏开发者、作家&#xff08;Engineer, Programmer, Game Developer, Author&#xff09; Stephen …

HttpServletRequest vs ServletContext 全面解析

HttpServletRequest vs ServletContext 全面解析 一、 核心区别概览特性HttpServletRequest (请求对象)ServletContext (Servlet上下文/应用对象)作用域请求范围应用范围生命周期从客户端发出请求开始&#xff0c;到服务器返回响应结束。从Web应用启动&#xff08;部署&#xf…

Java后端工程师如何学AI

Java后端工程师如何学AI 目录 前言为什么Java后端工程师要学习AIAI学习路径规划基础知识体系实践项目建议学习资源推荐学习时间规划常见问题与解决方案职业发展建议总结 前言 随着人工智能技术的快速发展&#xff0c;AI已经不再是计算机科学专业的专属领域。作为Java后端工…

Django REST Framework 中 @action 装饰器详解

概述 action 装饰器是 Django REST Framework (DRF) 中 ViewSet 的一个核心功能&#xff0c;用于定义自定义路由方法。它允许开发者在标准的 CRUD 操作&#xff08;list、create、retrieve、update、destroy&#xff09;之外&#xff0c;创建符合特定业务需求的接口&#xff0c…

【重磅更新】RetroBoard 全面升级,让敏捷回顾更高效、更安全、更贴心!

​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​…

中州养老:华为云设备管理接口开发全流程

需求分析点击同步数据时,要把华为云的数据拉取到我们的系统中对于新增设备操作,实际上这些参数与华为云产品我们添加设备时的参数是一样的表结构设计E-R图数据库字段接口分析对于设备中的数据,我们既要再IOT平台存储,又要在数据库中存储.之所以保存两份数据的原因:IOT平台中只是…

Llama-Factory微调Qwen2.5-VL从数据集制作到部署记录

Llama-Factory微调Qwen2.5-VL从数据集制作到部署记录 电脑环境配置&#xff1a; 1.ubuntu24 2.3090(24G) 3.Cuda12.9 一、数据集制作 我的数据集主要是对图像内容进行描述 1.Label-studio制作数据集 这是最原始的从零开始制作数据集的方法&#xff0c;不建议这样做&#xff01;…

【蓝桥杯真题67】C++数位和为偶数的数 第十五届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解

C++数位和为偶数的数 第十五届蓝桥杯青少年创意编程大赛C++选拔赛真题 博主推荐 所有考级比赛学习相关资料合集【推荐收藏】 1、C++专栏 电子学会C++一级历年真题解析 电子学会C++二级历年真题解析

【计算机网络 | 第11篇】宽带接入技术及其发展历程

文章目录宽带接入技术详解数字传输系统技术演进早期电话网的传输技术演变数字传输系统技术演进&#xff1a;从碎片到统一宽带接入技术 ADSLADSL的基本原理与非对称特性DMT调制技术&#xff1a;多子信道并行传输ADSL接入网组成电话分离器的设计原理与优势ADSL的升级&#xff1a;…

(论文速读)SCSegamba:用于结构裂纹分割的轻量级结构感知视觉曼巴

论文题目&#xff1a;SCSegamba: Lightweight Structure-Aware Vision Mamba for Crack Segmentation in Structures&#xff08;用于结构裂纹分割的轻量级结构感知视觉曼巴&#xff09;会议&#xff1a;CVPR2025摘要&#xff1a;不同场景下的结构裂缝像素级分割仍然是一个相当…

《苏超风云》亮相时尚大赏,成短剧行业发展新风向

当男频短剧凭借《一品布衣》五天横扫10亿播放的数据宣告逆袭&#xff0c;短剧市场格局正经历深刻洗牌。风口之下&#xff0c;头条视听、中皋文旅、国内时尚视觉与短视频创作领域的头部厂牌“大湾视频”携手下场&#xff0c;打造精品男频短剧《苏超风云》&#xff0c;剑指2025年…

HTML5新年元旦网站源码

新年主题网站开发概述 本项目基于HTML5、CSS3与JavaScript技术栈&#xff0c;打造了一个功能丰富、交互体验流畅的新年主题网站&#xff0c;涵盖文化展示、互动娱乐与社交分享三大核心模块&#xff0c;通过现代化前端技术实现沉浸式节日氛围营造。 1.1、核心功能架构 网站采…

CentOS 7 下iscsi存储服务配置验证

一、环境说明 centos7服务器*2服务器ip&#xff1a;服务端10.10.10.186 客户端10.10.10.184服务端存储卷sda1提前关闭防火墙&#xff0c;或开放默认 iSCSI 使用 3260 端口 二、服务端&#xff08;Target&#xff09;配置 安装 iSCSI target 服务 yum install -y targetcli syst…

立即数、栈、汇编与C函数的调用

一、立即数在 ARM 架构中&#xff0c;立即数是指在指令中直接编码的常量值&#xff0c;而不是通过寄存器或内存引用的值立即数的特点编码限制&#xff1a;ARM指令是固定长度的&#xff08;32位&#xff09;&#xff0c;因此立即数不能占用太多位数。典型的算术和逻辑指令通常只…

贪心算法与动态规划:数学原理、实现与优化

贪心算法与动态规划&#xff1a;数学原理、实现与优化 引言&#xff1a;算法选择的本质 在计算机科学领域&#xff0c;算法选择的本质是对问题特征的数学建模与求解策略的匹配。贪心算法与动态规划作为两种经典的优化算法&#xff0c;分别在不同问题域展现出独特优势。本文将从…

Leetcode 刷题记录 21 —— 技巧

Leetcode 刷题记录 21 —— 技巧 本系列为笔者的 Leetcode 刷题记录&#xff0c;顺序为 Hot 100 题官方顺序&#xff0c;根据标签命名&#xff0c;记录笔者总结的做题思路&#xff0c;附部分代码解释和疑问解答&#xff0c;01~07为C语言&#xff0c;08及以后为Java语言&#xf…

Android Studio Meerkat | 2024.3.1 Gradle Tasks不展示

把这两个开关打开&#xff0c;然后刷新gradle文件

Java中方法重写与重载的区别

目录 1. 方法重载 (Overload) 什么是方法重载&#xff1f; 重载的特点&#xff1a; 重载的示例&#xff1a; 重载的调用&#xff1a; 2. 方法重写 (Override) 什么是方法重写&#xff1f; 重写的特点&#xff1a; 重写的示例&#xff1a; 重写的调用&#xff1a; 3.…

微信小程序发送订阅消息-一次订阅,一直发送消息。

实现思路长期订阅要求太高&#xff0c;需要政府、公共交通等单位才有资格&#xff0c;所以只能使用一次性订阅。 就像是买奶茶&#xff0c;下单以后&#xff0c;会弹出让用户订阅消息那种。以买奶茶为例:用户第一次下单成功&#xff0c;点击了订阅消息。&#xff08;一般都有三…