利用 SWIG 对 C++ 库进行 Python 包装

功能目的:用c++写一个功能,然后用swig将c++写得功能封装成一个python库,然后在python中可以直接import 调用。
注:SWIG 实际上是一个编译器,获取C/C++的声明,用一个壳包起来,以便通过其他语言访问这些声明。因此,SWIG 最大的好处就是将脚本语言的开发效率和 C/C++ 的运行效率结合起来。
1.安装 swig

sudo apt-get install swig

输入:swig -version查看是否安装成功,成功会出现:

SWIG Version 3.0.12

Compiled with g++ [x86_64-pc-linux-gnu]

Configured options: +pcre

Please see http://www.swig.org for reporting bugs and further information

2.写一个c++头文件 example.h

#include <iostream>
using namespace std;
class Example{
    public:
        void say_hello();
};

3.写个c++源文件example.cpp,对头文件中的方法进行实现

#include "example.h"

void Example::say_hello(){
    cout<<"hello"<<endl;
}

4.写一个".i"文件example.i,将c++写得功能方法打包成扁平的接口

%module example
%{
#include "example.h"
%}
%include "example.h"

a.%module后面的名字是被封装的模块名称,Python通过这个名称加载程序。
b.%{…%}之间所添加的内容,一般包含此文件需要的一些函数声明和头文件。
c.最后一部分,声明了要封装的函数和变量。

5.写一个setup.py文件,将接口打包生成一个 模块

#!/usr/bin/env python

"""
setup.py file for SWIG C\+\+/Python example
"""
from distutils.core import setup, Extension
example_module = Extension('_example',
                           sources=['example.cpp', 'example_wrap.cxx',],
                           )
setup (name = 'example',
       version = '0.1',
       author      = "www.99fang.com",
       description = """Simple swig C\+\+/Python example""",
       ext_modules = [example_module],
       py_modules = ["example"],
       )

6.执行以下命令,来加载c++

swig -c\+\+ -python example.i
python setup.py build_ext --inplace

"swig -c++ -python example.i"命令生成了两个文件:example_wrap.cxx, example.py。example_wrap.cxx里会对Example类提供类使以下的扁平接口:

Example* new_Example();

void say_hello(Example* example);

viod delete_Example(Example *example);

这个接口被编译到_example.so里,_example可以做为一个Python module直接加载到Python解释器中。example.py利用_example里提供的接口,将扁平的接口还原为Python的Example 类,这个类做为C++ Example类的代理类型,这样使用方式就更加自然了。
7.python后,输入以下内容,便可以完成简单的python 导入c++写得功能

>>> import example
>>> example.Example().say_hello()
hello
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值