版本通用——Win10系统使用SWIG封装C++(Python调用)(二)

回顾(一):上一次的封装是用python自带的distutils,通过编写setup.py生成关于c++内容的python包,这次使用VS2019做配置导出python拓展包

C++代码准备

注:前期准备如(一)所示。

C++扩展包文件

C++扩展包文件是名为example的cpp和h文件,这个文件会被导出成python扩展包在python中调用,其中

C++头文件
// example.h
#include "aaa.h"
#include <iostream>
using namespace std;

class example {
private:
    int num;
public:
    void say_hello(void);
    void change(int din);
    int get_num();
};
C++源文件
// example.cpp
#include "example.h"

void example::say_hello(void) {
    cout << "hello python,I am C++" << endl;
    aaa aaa;
    aaa.say_hello();
}

void example::change(int din) {
    num = din;
}

int example::get_num(void) {
    return num;
}

纵观两个文件代码,发现其中调用了“aaa.h”这个头文件,这里就要引出被扩展包文件调用的另一对名为aaa的cpp和h文件了。

C++扩展包调用文件

“C++扩展包调用文件”就是上述“被C++扩展包文件调用”的名为aaa的cpp和h文件了,这里虽然只提及了一个文件,但是可以创建多个,“C++扩展包调用文件”个数可以任意。

C++头文件
// aaa.h
#pragma once
#include <iostream>
using namespace std;

class aaa {
public:
	void say_hello(void);
};
C++源文件
// aaa.cpp
#include "aaa.h"
void aaa::say_hello(void) {
    cout << "hello python,I am C++" << endl;

}

导入VS2019

新建VS空项目

在这里插入图片描述
将上述准备好的文件复制到建立的项目中
在这里插入图片描述
将文件导入项目中
在这里插入图片描述

创建SWIG封装说明文件

右键点击“exampleOutput”或者解决方案资源管理器界面内空白处,新建一个.i文件,内容和名字与(一)中所述相同。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

VS属性配置

重要!!!!!极其重要!!!!!
容易出错!!!!

步骤一

首先,因为我装的python是64bit的,所以这里要改成Release + x64,如果你装的是32位的要改成win32或者x86,Release不变!
在这里插入图片描述
项目 右键属性进入属性页开始配置

步骤二

因为python3.7适用的对应编译器是VC141,编译器版本可以上网查到,因此,在VS2019的环境下不能用其默认的平台工具集,将Windows SDK版本设置成自己下拉框有的随便一个版本,不要用“10.0更新到最新版本”(为什么不要我也不知道,运行的时候报错了),平台工具集在安装了vs2017(v141)以后选入,配置类型选择“动态库”。在这里插入图片描述
至于如何安装 平台工具集 …
打开 Visual Studio installer,点击修改(modify),搜索vc,安装 MSVC v141(注意后缀)。
在这里插入图片描述

步骤三

配置python的对应版本include和lib路径,并将“输出文件”改成“_example.pyd”,注意模块名前的下滑线和模块名。
在这里插入图片描述
在这里插入图片描述
输入项加一个python3.lib
在这里插入图片描述
点击“确定”,结束属性页配置。

编译接口文件

example.i 文件右键属性 -> 配置属性 -> 常规 -> 项类型 选中 自定义生成工具 然后 确定
在这里插入图片描述
再重新右键属性打开,在自定义生成工具 -> 常规 -> 命令行 添加 swig.exe -c++ -python "%(FullPath)"
输出 中 添加 $(InputName)_wrap.cxx点击 确定 在这里插入图片描述
example.i 文件右键编译,文件夹中将生成xxxxxx_wrap.cxx的文件,这里是example_wrap.cxx
在这里插入图片描述
将其加入到项目中
在这里插入图片描述
在这里插入图片描述
对整个项目点击生成,没有问题的话就会在文件夹中看到pyd扩展包了
在这里插入图片描述
在这里插入图片描述

测试

在当前文件夹中新建一个test.py

print("hello world")
print("hello world")
import example

a = example.example()
a.say_hello()

a.change(3)
print(a.get_num())

运行成功
在这里插入图片描述

参考链接

https://blog.csdn.net/GEANNACAO/article/details/115582827
https://www.cnblogs.com/guolongzheng/p/12145254.html
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值