Windows平台下Python使用swig调用C++

步骤0:swig简介

swig是千篇一律栽好用C++代码转换为多脚本语言封装的工具,可以当swig官网www.swig.org下载,解压后以swig.exe的不二法门上加至环境变量path中即可使swig

步骤1:准备C++代码

编制得以Python中调用的C++代码,最好以函数和类的扬言统一置于头文件中,函数和好像的贯彻放到源文件中

C++头文件

头文件要概括:

  • #include调用(例如#include <iostream>
  • 取名空间指定using namespace std;
  • 函数和类的宣示

#include <iostream>
using namespace std;

class example {
    private:
        int num;
    public:
        void say_hello(void);
        void change(int din);
        int get_num();
};

C++源文件

来源文件为头文件被函数和相近的实现

#include "example.h"

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

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

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

步骤二:使用swig封装

编排封装说明文件

swig封装需要一个.i后缀文件之卷入说明,其中

  • %module <name>也包装名称,Python调用的包名就是<name>
  • %{...%}啊附加的函数说明和头文件,源文件以外的部分还如包于此处,包括头文件与宏定义等
  • 以后也而卷入的函数或近乎,可以直接引用头文件(若曾将封装的片的扬言写于头文件中)

%module Example_swig

%{
#include "example.h"
%}

%include "example.h"

调用swig封装

在指令执行遭输入swig -python -c++ <swig_config>.i,其中<swig_config>.i啊地方写的证实文件

swig -python -c++ example.i

调用后杀成稀独文件:

  • <cpp_source>_wrap.cxx文件
  • <name>.py文件

步骤三:使用VS编译

安装VC140编译器

python3.5动的编译器是VC140编译器,对许版本是VS2015,本次用的是VS2017采取VC141编译器。需要在VS2017受安装VC140编辑器,可以一直在工具->获取工具和功能中安装

布置VS编译环境

于C++的空工程基础及确立环境

配备输出类型

生成->配置管理器中设置:

  • 活动解决方案配置Release
  • 活动解决方案平台X64(本机为64位机)

布输出

引入Python库(关键)

项目->属性中配置Python的库

  • VC++目录中的包含目录饱受,导入Python安装路径下的include路径(包含Python.h)
  • 链接器->常规附加库目录备受,导入Python安装路径下的libs路径C++(注意不是Lib路径,包括dll文件)

配置头文件

配置库

编译输出

选择生成->生成解决方案,在X64->Release文件夹下发出一个dll文件,即为编译输出的动态链接库。将其称变更也_<name>.pyd(本例中也_Example_swig.pyd),将其与swig生成的<name>.py文件在同目录中

手续四:测试调用

在python,使用import <name>即可调用刚才生成的保管(同一目录下)

import Example_swig

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

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

hello python,I am C++
3
[Finished in 0.2s]