通过SWIG封装C/C++代码被Python调用

15 篇文章 0 订阅
1 篇文章 0 订阅

1.介绍

SWIG将C代码做成各种脚本语言的扩展模块(Python,Perl,Tcl等。SWIG本质上是一个编译器,它可以通过C/C++的头文件或者一个特殊的接口文件来生成一个以_wrapc为后缀的包装文件,例如你的C模块叫 test.c, 那么SWIG会为你生成一个test_wrapc文件,然后将这两个文件编译成一个动态链接库,就能使用其它的脚本语言来调用。

2.环境配置
  python 2.7 + SWIG 2.0.12

3.Demo
  1)下载并安装SWIG 2.0.12版本(
http://swig.org/), Python 2.7 版本.
    并将C:\swigwin-2.0.12, c:\Python27 添加到环境变量Path中。
  2)代码:
    foo.h:
      extern void hello(void);
    foo.c:
      #include <stdio.h>
      #include "foo.h"
     
      void hello(void)
      {
        printf("Hello world!\n");
      }
    foo.i:
      %module foo
      %include "foo.h"
  3)编译:
    step 1: 调用swig生成wrapper, foo_wrap.c和foo.py(swig -python foo.i)
    step 2: 使用vc的编译器进行编译目标文件。
      打开VS -> Tools -> Visual Studio 2005 Command Prompt,定位到foo.c所在目录。
      cl /Fe_foo.pyd /LD foo.c foo_wrap.c c:\Python27\libs\python27.lib /Ic:\Python27\include
      生成的foo.py和_foo.pyd择其一即可正常调用。
    step 3: 在当前目录下运行python命令行进行测试。
      >> import foo
      >> foo.hello()

4.注意事项
   对于将要打包的C/C++代码,只有.h和.i文件时不够的,必须有.c/.cpp源代码,也就是说对于非自己生成的DLL库,是不能直接通过头文件生成.pyd库的。(但是我们可以加一层调用,这样的话就可以,但是通用性比较成问题,当外部DLL库导出符号发生变化的时候,中间层必须同时变化,维护是一场灾难。)
   参见文章:
http://blog.csdn.net/chishui2/article/details/2254961

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值