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

这篇具有很好参考价值的文章主要介绍了【C++/Python】Windows用Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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


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


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


1. 下载SWIG安装包

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

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


2. 添加环境变量

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

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


3. 测试安装成功

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

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


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) 创建空项目

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

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

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

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

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

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

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

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

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

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

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

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

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

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


8. 使用pyd文件

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

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

新建一个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()

测试结果:
【C++/Python】Windows用Swig实现C++调用Python(史上最简单详细,80岁看了都会操作),c++,python,windows文章来源地址https://www.toymoban.com/news/detail-729280.html

到了这里,关于【C++/Python】Windows用Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • C++:史上最坑小游戏

    史上最坑小游戏,先别使用,往后看! 破解: 输入1~4的破解方法(二次开机)或: 输入5,6:的破解方法(一旦运行此程序,只有按下Windows开始键(其实我也不知道它叫什么,就是那个按一下就能显示开始窗口的键)然后按 cmd就会弹出一个窗口,根平时代码运行时的窗口一

    2024年01月21日
    浏览(10)
  • C++ system()函数的常用用法 (史上最详细)

    目录 一.推荐:     1. system(\\\"pause\\\")     2. system(\\\"color *\\\")     3.system(\\\"title *\\\")     4. system(\\\"cls\\\") 二.文件操作:     1. system(\\\"start *\\\")     2. system(\\\"del *\\\")     3. system(\\\"copy A B\\\")     4. system(\\\"move A B\\\") 三.系统操作     1. 关机,重启,睡眠     2. 日期/时间     3. task     1. system(\\\"pause\\\"

    2024年02月12日
    浏览(10)
  • C++ 1005:地球人口承载力估计(史上最详细版)

    同志们新年快乐!挖掘机技术哪家强? 当然是洒家强! 同意的投一票!(见文章最后) 广告结束 言归正传 今天给大家带来的题目是:C++ 1005:地球人口承载力估计 下面是这篇文章的目录: 1.题目到底是啥? 2.史上最详细题解!!! 3.代码举例!!! 不告诉你 那是不可能的

    2024年02月15日
    浏览(7)
  • 史上最简单RabbitMQ中IO流异常的解决 org.springframework.amqp.AmqpIOException: java.io.IOException 超级简单

    史上最简单RabbitMQ中IO流异常的解决 org.springframework.amqp.AmqpIOException: java.io.IOException 超级简单

    org.springframework.amqp.AmqpTimeoutException: java.util.concurrent.TimeoutException     at org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:73) ~[spring-rabbit-2.4.8.jar:2.4.8]     at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(Ab

    2024年02月06日
    浏览(12)
  • 史上最详细的Windows10系统离线安装.NET Framework 3.5的方法(附离线安装包下载)

    史上最详细的Windows10系统离线安装.NET Framework 3.5的方法(附离线安装包下载)

     在Windows10的使用过程中经常会遇到一些软件提示:“你的电脑上的应用需要使用以下Windows功能:.NET Framework 3.5(包括.NET 2.0和3.0)”,而点击“下载并安装此功能”后需要通过Windows更新在线下载安装的,速度是非常慢的,因此下面说一下怎么离线安装.NET Framework 3.5。  1.准备一

    2024年02月20日
    浏览(10)
  • 史上最详细的JAVA学生信息管理系统(MySQL实现)

    史上最详细的JAVA学生信息管理系统(MySQL实现)

    为了巩固Java的学习写了一个基于MVC设计模式的学生管理系统。 简单介绍一下MVC设计模式: 1、M也就是Model 模型层(也叫数据层)主要是通过这个类来进行数据的操作。 2、V是Views 视图层,主要就是来显示页面信息。 3、C是Controller控制器,主要是用来做流程调度。 开发工具:

    2024年02月08日
    浏览(11)
  • Python WEB UI自动化测试(1)-Selenium基础(史上最详细,一篇就够)

    Python WEB UI自动化测试(1)-Selenium基础(史上最详细,一篇就够)

    命令行安装 找到本地chrome的浏览器的版本 下载相应版本的驱动器 chrome浏览器驱动下载 地址:chromedriver.storage.googleapis.com/index.html 下载完后,解压到本地的python的目录下 geckodriver: https://firefox-source-docs.mozilla.org/testing/geckodriver/Support.html edgedriver: https://developer.microsoft.com/en-us/m

    2024年02月03日
    浏览(9)
  • 树莓派最新的安装,设置与教程,助你一次性设置完毕树莓派。(以macOS为例,包含windows和linux)史上最详细!一次性完成所有设置!

    树莓派最新的安装,设置与教程,助你一次性设置完毕树莓派。(以macOS为例,包含windows和linux)史上最详细!一次性完成所有设置!

    最近刚入手了树莓派,但是发现网上的资料总是松松散散,找寻起来很麻烦,正好自己完成了设置和安装,于是写下来作为回顾与教程。本文采用的是无屏幕无网线的方式,不过会介绍其他情况。不定期更新,敬请期待!第一次写csdn blog,很多地方有不足,而且略显啰嗦,请

    2024年02月05日
    浏览(43)
  • MySQL Workbench 操作详解(史上最细)

    MySQL Workbench 操作详解(史上最细)

    右键新建的数据库BMI,设置为此次连接的默认数据库,接下来的所有操作都将在这个数据库下进行 将bmi下拉单展开,点击Table,右键创建Table: 给Table命名,添加Column,设置Column的Datatype,PrimaryKey等属性。点击Apply后,Workbench仍会自动生成SQL语句,再次点击Apply,成功创建新表

    2023年04月08日
    浏览(8)
  • 【Python游戏开发】史上最有趣的一款象棋代码,真是太好玩了,这些人都说它比国际象棋更好玩,不服你往下看?(敲赞啊~)

    【Python游戏开发】史上最有趣的一款象棋代码,真是太好玩了,这些人都说它比国际象棋更好玩,不服你往下看?(敲赞啊~)

    粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。 一直以来, 中国象棋都是中华民族的一种象征,当然也是人们最为喜感的一种娱乐方式。 在若干年前,人们都习惯于约上自己的棋友,来一种激战。可是,科技改变人类,也改版了人 们的生活方式。现如今,越

    2024年02月08日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包