swig+python的用法

原链接:http://www.swig.org/Doc1.3/Python.html#Python_nn7

基础用法(以C为例)

1. 写两个.h和.c文件如下:

/* File: example.c */

#include "example.h"

int fact(int n) {
    if (n < 0){ /* This should probably return an error, but this is simpler */
        return 0;
    }
    if (n == 0) {
        return 1;
    }
    else {
        /* testing for overflow would be a good idea here */
        return n * fact(n-1);
    }
}
/* File: example.h */

int fact(int n);


2. 再写一个swig模块定义文件如下

/* File: example.i */
%module example

%{
#define SWIG_FILE_WITH_INIT
#include "example.h"
%}

int fact(int n);


3. 通过命令行运行:$ swig -python example.i

如果是使用C++源码,则要加上-C++选项:$ swig -c++ -python example.i

这样会创建两个不同的文件:example_wrap.c(如果用c++源码是example_wrap.cxx),和python文件example.py。


4. 使用python.distutils生成模块动态库
最近的python版本都会自带一个distutils工具,可以用它来创建python的扩展模块。使用它也很简单,只需要先定义一个配置文件,通常是命名为setup.py,如下:

#!/usr/bin/env python

"""
setup.py file for SWIG example
"""

from distutils.core import setup, Extension


example_module = Extension('_example',
                           sources=['example_wrap.c', 'example.c'],
                           )

setup (name = 'example',
       version = '0.1',
       author      = "SWIG Docs",
       description = """Simple swig example from docs""",
       ext_modules = [example_module],
       py_modules = ["example"],
       )
代码:example_module = Extension(...)创建一个扩展模块对象,并命名为_example,并使用由swig生成的example_wrap.c和用户自己的源码example.c.swig生成的扩展模块对象名必须使用python模块名并在前面加上下划线_,刚才我们通过swig生成的python文件是example.py,所以这里的模块对象名必须是'_example',否则无法顺利编译.


5. 在命令行把当前工作目录切换到上前example.c,example_wrap.c,example.py,setup.py所在的目录,然后输入以下命令:

%PYTHON_ROOT%\python setup.py build_ext --inplace

就能生成_SwigPythonTest.pyd文件,也就是我们需要的动态库模块.


6. 在python中使用C++动态库模块,可参照http://blog.csdn.net/zhanhuai1/article/details/7234565最后进行测试的方法


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值