在Python中调用C++,使用SWIG

SWIG:Simplified Wrapper and Interface Generator,顾名思义,就是将C/C++包装为其他高级语言的Wrapper工具,非常好用。

该项目历史悠久(创始于1995年!),且一直非常活跃,目前最新版本为2011年5月发布的2.0.4。

1、安装SWIG

wgethttp://prdownloads.sourceforge.net/swig/swig-2.0.4.tar.gz
tar-xzvf swig-2.0.4.tar.gz
cdswig-2.0.4/
#我们这里只编译Python的语言支持,可以根据你得需要加别的!
./configure --without-alllang --with-python|greppython
make
sudomake install
1
wgethttp://prdownloads.sourceforge.net/swig/swig-2.0.4.tar.gz
2
tar-xzvf swig-2.0.4.tar.gz
3
cdswig-2.0.4/
4
#我们这里只编译Python的语言支持,可以根据你得需要加别的!
5
./configure --without-alllang --with-python|greppython
6
make
7
sudomake install


   

2、C++代码
我们以包装一个简单的类为例子:

01 #include <string>
02 usingstd::string;
03  
04 classMyObj
05 {
06 public:
07  
08     string SayHello(string name)
09     {
10         string ret("Hello, ");
11         returnret + name;
12     }
13 private:
14     string id;
15 };

3、编写Interface文件
SWIG需要一个intf文件,可以写的很复杂,也可以偷懒:只引用你要Wrap的.h头问件就可以啦!

01 /* myobj.i */
02 %module myobj
03 %{
04 /* 相关引用 */
05 #include "MyObj.h"
06 #include <string>
07 %}
08  
09 /* 对STL的支持 */
10 %include stl.i
11  
12 /* Wrapper并生成代码 */
13 %include"MyObj.h"

4、生成Wrapper代码

1 #生成,第一个python是目标语言,跌入个-c++是启用c++模式
2 swig -python -c++ ./myobj.i
3  
4 #成功的话,会生成如下文件
5 myobj.i  myobj_wrap.c  myobj_wrap.cxx
6 #编译,生成so文件,注意一定要用g++而不是ld做Link!!
7 g++ -c myobj_wrap.c myobj_wrap.cxx -I /usr/include/python2.6/
8 g++ -shared myobj_wrap.o -o myobj.so

5、测试

1 >>>importmyobj
2 >>> o = myobj.MyObj()
3 >>> o.SayHello("ICT")
4 'Hello, ICT'
5 >>>

6、补充

如果你想使用复合类型,例如vector<string>,请务必在.i文件中声明!

1 namespacestd{
2 %template(VectorOfString) vector<string>;
3 }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值