python 调用c++接口

目前需要将c++ 接口被python调用,在网上找发现有一个工具swig可以实现这个功能。关于swig大家可以去网上了解,这里就不做过多介绍,本文主要是给出一个完整的例子。因为我发现网上给出的例子大多不可用,或有些地方说的不明白


1.首先要在linux下安装swig工具,大家可以输入swig命令按提示安装(ubuntu)


2.写一个c++的接口类

//example.h

#ifndef EXAMPLE_H
#define EXAMPLE_H

class Math
{
 public:
    int pi() const;
    void pi(int pi);
 private:
    int    _pi;
};

#endif

//example.cpp

#include "example.h"

int Math::pi() const
{
    return this->_pi;
}

void Math::pi(int pi)
{
    this->_pi = pi;
}


3. 接下里我们需要一个.i文件用来转换接口的

//example.i

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

其中 example 是模块名字,可以被python导入的。大括号内的是会被写到生成文件里,是你需要的头文件,最后一个

%include "example.h"
是要遍历的接口(不需要你都列出来 他会根据.h文件扫描)
4. 我们现在要将接口导出成python的接口

swig -python -c++ example.i

-python :是目标语言

-c++ : 是接口源语言

5. 如果不报错 可以看到多出来2个文件 example.py 和 example_wrap.cxx

接下来编译:

g++ -c example.h example.cpp example_wrap.cxx - I /usr/include/python2.7/

其中
/usr/include/python2.7/
是去找 python.h 这个文件,通过安装 python-dev可以获得


6. 最后一步是生成python的可以导出的包

g++ -shared example.o example_wrap.o -o _example.so

记住
_example.so
名字一定不能是
example.so
否则python导入模块时会出错。

最后测试在终端输入 python 进入python的解释器

>>> import example
>>> obj = example.Math()
>>> print obj.pi()
0
>>> obj.pi(10)
>>> print obj.pi()
10
>>> 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值