在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
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值