欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

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

发布时间:2025/5/22 c/c++ 38 豆豆
生活随笔 收集整理的这篇文章主要介绍了 在Python中调用C++,使用SWIG 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

http://www.coder4.com/archives/2141

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

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

1、安装SWIG

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

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <string> using std::string; class MyObj { public:     string SayHello(string name)     {         string ret("Hello, ");         return ret + name;     } private:     string id; };

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 /* myobj.i */ %module myobj %{ /* 相关引用 */ #include "MyObj.h" #include <string> %} /* 对STL的支持 */ %include stl.i /* Wrapper并生成代码 */ %include "MyObj.h"

4、生成Wrapper代码

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

5、测试

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

6、补充

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

1 2 3 4 namespace std{ %template(VectorOfString) vector<string>; }

转载于:https://www.cnblogs.com/DjangoBlog/p/4105530.html

总结

以上是生活随笔为你收集整理的在Python中调用C++,使用SWIG的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。