您的位置:首页 > 编程语言 > C语言/C++

在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


2、C++代码

我们以包装一个简单的类为例子:

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
};
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
>>>
import
myobj
2
>>>
o = myobj.MyObj()
3
>>>
o.SayHello(
"ICT"
)
4
'Hello,
ICT'
5
>>>
6、补充

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

1
namespace
std{
2
%
template
(VectorOfString)
vector<string>;
3
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: