在Python中调用C++,使用SWIG
2014-03-29 14:05
381 查看
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
我们以包装一个简单的类为例子:
01 | #include <string> |
02 | using std::string; |
03 |
04 | class MyObj |
05 | { |
06 | public : |
07 |
08 | string SayHello(string name) |
09 | { |
10 | string ret( "Hello, " ); |
11 | return ret + name; |
12 | } |
13 | private : |
14 | string id; |
15 | }; |
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" |
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 |
1 | >>> import myobj |
2 | >>> o = myobj.MyObj() |
3 | >>> o.SayHello( "ICT" ) |
4 | 'Hello, ICT' |
5 | >>> |
如果你想使用复合类型,例如vector<string>,请务必在.i文件中声明!
1 | namespace std{ |
2 | % template (VectorOfString) vector<string>; |
3 | } |
相关文章推荐
- linux下使用SWIG实现Python调用C++ sdk读取相机图片
- centos中使用swig实现python调用c++
- 使用swig在python中调用c++代码
- python调用c和c++库(直接调用和使用swig)
- Python调用C/C++(使用SWIG)
- Windows下python使用SWIG调用C++ dll
- centos7下使用swig扩展python接口来调用c++ 实现声纹识别
- 在Python中使用SWIG调用C和C++程序
- Python调用C++函数(SWIG,VS2013使用numpy.i完成Numpy与C++数组转换)
- linux下使用swig让python调用C++(复杂版:包括多文件调用和链接库)
- 使用SWIG实现Python调用C/C++代码
- linux下使用swig让python调用C++(复杂版:包括多文件调用和链接库)
- Linux下利用SWIG完成Python对使用OpenCV的C++文件的调用
- 在Python中调用C++,使用SWIG
- Python调用MongoDB使用心得
- python使用suds调用webservice
- 使用SWIG实现C/C++与其他语言间的互相调用 zz
- 使用shell调用python中的函数
- python异常处理、模块的使用、__all__的调用、模块的发布和安装
- 使用Python调用Web Service