Windows平台下,Python调用Swig来调用C++库

在网上找了蛮久的资料,各种试了一下。根据以下链接,记录一个过程,参考博客如下:

https://www.jianshu.com/p/a257e630fe42

步骤一:

可以在swig官网www.swig.org下载,解压后将swig.exe的路径添加到环境变量path中即可使用swig

步骤二:

我是用的VS2015新建一个Win32 Console Application,注意在Application Settings中选择DLL以及空项目。完成后将工程的配置改成release,我的是64位的计算机,改成X64

c++的头文件如下:

#include <iostream>
using namespace std;

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

源文件如下:

#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封装

在命令行中一直cd.i文件所在的目录,在命令行中输入swig -python -c++ XXX.i,其中XXX.i为上面写的说明文件

swig -python -c++ example.i

调用后生成两个文件:

XXX_wrap.cxx文件和XXX.py文件

步骤四:使用VS编译

引入Python库

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

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

编译输出

将刚才调用swig封装而生成的XXX_wrap.cxx文件添加到项目工程中,然后编译,会在解决方案的文件夹(不是项目文件夹,我一开始一直在这里找,什么也没找到)下的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())

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值