【C++/Python】Windows用Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)

news2024/11/28 6:28:57

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


#【C++/Python】Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)

目录

    • #【C++/Python】Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)
  • 1. 下载SWIG安装包
  • 2. 添加环境变量
  • 3. 测试安装成功
  • 4. 编写C++代码
  • 5. 编写接口文件
  • 6. 执行i文件
  • 7. 使用visual studio生成DLL
  • 8. 使用pyd文件


1. 下载SWIG安装包

官网下载SWIG并解压。官网[传送门]

在这里插入图片描述


2. 添加环境变量

将SWIG路径 D:\swigwin-4.1.1 添加到环境变量中。

在这里插入图片描述


3. 测试安装成功

打开cmd,输入 swig --help 显示如下,证明安装成功。

在这里插入图片描述


4. 编写C++代码

编写要转换为python的C++代码

testSwig.h:

class SumTest{
public:
    void printNum();

};


int add_num(int a, int b);


std::string add_string(std::string a, std::string b);

testSwig.cpp:

#include <iostream>
#include "testSwig.h"

int add_num(int a, int b){
    return a + b;
}

std::string add_string(std::string a, std::string b){

    return a + b;
}


void SumTest::printNum(){
    std::cout << "I love You" << std::endl;
}

5. 编写接口文件

为了使用swig,你需要增加一个接口文件。 接口文件一般以.i 为文件的后缀。接口文件的作用是,提取c/c++源文件中的接口函数或类型,以及定义一些特殊的功能

testSwig.i:

%module testSwig

%{
#include <iostream>
#include "testSwig.h"
%}

%include "std_string.i"

int add_num(int a, int b);
std::string add_string(std::string a, std::string b);

class SumTest {
public:
    void printNum();
};

可以把接口文件看做三个部分:

  1. 第一部分是定义要生成的模块名,就是上面的第一行。
  2. 第二部分就是包含的头文件信息。
  3. 第三部分就是指定导出的函数。

由于接口文件的存在,c/c++源文件中一般不需要像导出dll一样需要声明导出函数,只需要保持原样就可以了。


6. 执行i文件

根据写好的接口文件,用swig进行编译,打开cmd,切换至包含.i 文件的路径下:

swig -python -c++ testSwig.i

编译生成两个文件,一个后缀名为.cxx的c++文件,一个后缀名为.py的python文件,各自从c++和python的角度声明导出信息。


7. 使用visual studio生成DLL

1) 创建空项目

在这里插入图片描述

2)将 testSwig.cpptestSwig.cxxtestSwig.i 放在同一个目录下。

在这里插入图片描述

3)打开属性,将平台设置为X64VC++目录 中的 包含目录 设置为python的include 路径。

在这里插入图片描述

4)选择 链接器附加库目录 设置为python的 libs路径。

在这里插入图片描述

5)将 常规 属性中的配置类型,设置为 动态库.dll.

在这里插入图片描述

6)点击生成,编译出DLL文件。

在这里插入图片描述

在这里插入图片描述

7)将dll文件名字修改为下划线开头加模块名,后缀为.pyd,如:_testSwig.pyd

在这里插入图片描述


8. 使用pyd文件

将重命名后的 _testSwig.pyd文件和 testSwig.py 文件放在一起。

在这里插入图片描述

新建一个test.py 文件用于测试C++转python是否转换成功:

test.py:

import testSwig

a = testSwig.add_num(1, 2)
print(a)

b = testSwig.add_string("a", "b")
print(b)

c = testSwig.SumTest()
c.printNum()

测试结果:
在这里插入图片描述

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

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

相关文章

自动化测试:yaml结合ddt实现数据驱动!

在pythonunittestseleniumddt的框架中&#xff0c;数据驱动常见有以下几种方式实现&#xff1a; Csv/txtExcelYAML 本文主要给大家介绍测试数据存储在YAML文件中的使用场景。首先先来简单介绍一下YAML。 1. 什么是YAML 一种标记语言类似YAML&#xff0c;它实质上是一种通用…

方案:浅析AI视频分析与视频监控技术的工厂车间智能化监管方案

一、方案背景 工厂生产车间一般是从原材料到成品的流水作业&#xff0c;有大量器械和物料。为保障车间财产安全并提高生产效率&#xff0c;需要进行全面的监管。在生产制造流水线的关键工序中&#xff0c;不仅有作业过程监管需求&#xff0c;同时&#xff0c;也存在生产发生异…

全网最全知识图谱讲解!

什么是知识图谱 知识图谱标准化白皮书定义&#xff1a;知识图谱&#xff08;Knowledge Graph&#xff09;以结构化的形式描述客观世界中概念、实体及其关系&#xff0c;将互联网的信息表达成更接近人类认知世界的形式&#xff0c;提供了一种更好地组织、管理和理解互联网海量信…

Jmeter怎么实现接口关联?

用于接口测试时&#xff0c;后一个接口经常需要用到前一次接口返回的结果&#xff0c;应该如何获取前一次请求的结果值&#xff0c;应用于后一个接口呢&#xff0c;拿一个登录的例子来说明如何获取。 1、打开jmeter&#xff0c;新建一个测试计划&#xff0c;在测试计划里新建一…

分享基于SringBoot足球训练俱乐部系统Python训练打卡系统(源码+调试+lw)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人七年开发经验&#xff0c;擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等&#xff0c;大家有这一块的问题可以一起交流&#xff01; &#x1f495;&…

SMS--短信服务

1 短信服务介绍 短信服务&#xff08;Short Message Service&#xff09;是阿里云为用户提供的一种通信服务的能力。 2 短信服务使用 接下来,我们使用短信验证码功能来演示短信服务的使用。流程如下: 2.1 准备工作 2.1.1 实名认证 https://help.aliyun.com/document_detail…

智能箱式浪涌保护器综合行业解决方案

智能箱式浪涌保护器是一种集成了多种功能的浪涌保护装置&#xff0c;它可以对电力系统、通信系统、计算机系统、工业控制系统等设备提供有效的防雷和过电压保护。本文将详细介绍智能箱式浪涌保护器的作用和原理&#xff0c;以及在不同行业中的应用方案&#xff0c;并参考相关的…

【Hash表】两数之和-力扣 1 题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

【国产32位mcu】电动车控制芯片CS32F031C8T6的应用

近年来&#xff0c;随着“新国标”的落地&#xff0c;双轮电动车在智能化、强性能、安全性等方面不断演进&#xff0c;带动了新一轮的换车高峰。电动车控制器作为双轮电动车的核心部件&#xff0c;迎来新的增长。 芯海科技32位MCU CS32F031C8T6&#xff0c;作为电动车控制器的…

多因素身份验证MFA功能

随着信息技术的不断进步&#xff0c;网络威胁也随之不断升级和演化。为了保护敏感数据和网络资源&#xff0c;企业和组织需要采取更多的安全措施强化信息安全。多因素身份验证&#xff08;MFA&#xff09;已经成为了现代安全战略的核心组成部分之一。 在这篇文章中&#xff0…

软件工程第一次作业参考答案

题目 名词解释&#xff1a;软件危机、软件、软件工程、软件生命周期、瀑布模型、原型模型、增量模型、喷泉模型、敏捷过程模型。 答案 软件危机&#xff1a;软件危机是指在软件开发过程中所面临的一系列问题和挑战&#xff0c;包括成本超支、进度延误、质量不达标等。 软件…

机器学习之感知机原理及Python实现

机器学习算法感知机(perceptron)。感知机是一种较为简单的二分类模型&#xff0c;但由简至繁&#xff0c;感知机却是神经网络和支持向量机的基础。感知机旨在学习能够将输入数据划分为1/-1的线性分离超平面&#xff0c;所以说整体而言感知机是一种线性模型。因为是线性模型&…

全志H3 Linux编译尝试

全志H3 Linux编译尝试 主要参考&#xff1a;https://blog.csdn.net/qq_40731414/article/details/118684473部分内容介绍来自GPT&#xff0c;但是代码部分都会进行测试 一、简介 Linux编译的作用&#xff1a; 生成可执行的内核映像&#xff1a;编译Linux内核的主要目的是从源代…

使用GPT训练中秋古诗写作讲解

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

Linux CentOS7 lrzsz工具

一、简介 对经常使用linux系统IT人来说&#xff0c;linux系统的文件上传下载是很频繁的&#xff0c;linux默认支持sftp上传下载&#xff0c;CRT等工具集成了SecureFX&#xff0c;Xftp与xshell都可以实现文件的上传下载。今天要介绍的lrzsz是一款在linux里可代替ftp上传和下载的…

开发需知的文件加密与解密

背景 最近团队遇到一个小需求&#xff0c;存在两个系统 A、B&#xff0c;系统 A 支持用户在线制作皮肤包&#xff0c;制作后的皮肤包用户可以下载后&#xff0c;导入到另外的系统 B 上。皮肤包本身的其实就是一个 zip 压缩包&#xff0c;系统 B 接收到压缩包后&#xff0c;解压…

【xshell7】设置语法高亮(突出显示集)方式

设置高亮方式 增加文件路径 将下面内容起名 以.hls结尾&#xff0c;放入截图位置&#xff0c;然后按照步骤一选择即可 [Keyword_0] TermBackColor1 Underline1 Bold0 Strikeout0 Keyword[_a-z0-9-](.[_a-z0-9-])*[a-z0-9-](.[a-z0-9-])* DescriptionEmail address BackColorIn…

本地docker注册证书docker login连接到harbor仓库、利用shell脚本批量将镜像pull、tag、push到私有harbor仓库

1. 本地docker注册证书docker login连接到harbor仓库&#xff1a; 我们使用docker login/push/pull去与Harbor打交道&#xff0c;上传下载镜像等。 但是可能会出现x509: certificate signed by unknown authority之类的错误。 [roottest01 harbor.dev]# docker login harbor.d…

linux和windows选哪个?

linux和windows选哪个&#xff1f; 每年在大学中都会有这么一批学生&#xff1a; 沉浸在安装Linux系统&#xff0c;安装双系统&#xff0c;使用Linux系统看看电影&#xff0c;搞一搞炫酷的桌面效果。 最后收获了啥&#xff1f; 怕是啥也没有&#xff0c;命令学会了几个&…

免费的AI写作软件-智能AI写作工具

我们要谈的话题是AI写作&#xff0c;尤其是免费AI写作&#xff0c;以及147SEOAI写作免费工具。您是否曾经为了创作文章而感到煞费苦心&#xff1f;是否一直在寻找一种能够轻松生成高质量文章的方法&#xff1f; 147GPT批量文章生成工具​www.147seo.com/post/2801.html​编辑ht…