素材巴巴 > 程序开发 >

swig学习笔记(一)

程序开发 2023-09-12 18:16:45

前言:本文是在windows平台下,使用swig完成了在python里调用c++函数。c++文件较为简单,没有涉及什么C++的特性和语法,旨在用最简单的例子走通流程。

环境准备:python3.8+VS2022+swig(要将swig.exe所在的路径添加到环境变量中)

1 swig简介

SWIG是一个接口编译器,它将用C/C++编写的程序与Perl、Python、Ruby和Tcl等脚本语言连接起来。 它的工作原理是获取在C/ c++头文件中找到的声明,并使用它们来生成脚本语言访问底层C/ C++代码所需的包装器代码。 除此之外,SWIG提供了各种各样的定制特征,这些特征让你可以定制包装过程去匹配你的应用程序。

2 操作步骤

2.1 编写c++代码

test.h、test.cpp源码如下:

//test.h
 #pragma once
 int add(int a, int b);
 int sub(int a, int b);//test.cpp
 # include "test.h"
 int add(int a, int b)
 {return a + b;
 }int sub(int a, int b)
 {return a - b;
 }
 

2.2 编写.i文件

%module  test          //test为封装的模块名
 %{#define SWIG_WITH_INIT#include "test.h"%}
 %include "test.h  "
 

2.3 调用swig生成cxx文件

把test.h、test.cpp、test.i放在同一个目录下,并在此目录进入命令行,执行如下命令:

swig -c++ -python test.i

执行完成后,会在同目录下生成test.py和test_wrap.cxx文件

2.4使用VS生成pyd文件

2.4.1 将cxx文件加入VS项目中

在这里插入图片描述

2.4.2 配置编译环境

将编译环境设置为Release+x64

在这里插入图片描述

在附加包含目录中添加Python.h所在的路径

在这里插入图片描述

在附加依赖项中添加Python38.lib的路径
在这里插入图片描述

设置配置类型为.dll

在这里插入图片描述

设置目标文件扩展名为.pyd

在这里插入图片描述

2.4.3 点击生成解决方案

2.5 在py文件中调用C++函数

2.5.1 拷贝pyd文件并重命名

把VS项目x64Release路径下的pyd文件拷贝到test.h、test.cpp、test_wrap.cxx所在的目录(这个目录里什么是缺一不可的我还没去深究,我现在是把所有的文件都放在同一个目录下);然后要把这个pyd文件重命名为_test.pyd _开头是规范,test就是封装的模块名,不这么写的话py文件调用的时候会找不到的

2.5.2 编写py文件

test.py:

import testa = test.add(1, 100)
 b = test.sub(45, 5)print(a)
 print(b)
 

运行结果:

在这里插入图片描述

内容如有错误,敬请指正!


标签:

素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。