面对现实,超越自己
逆水行舟,不进则退
posts - 269,comments - 32,trackbacks - 0
一、SWIG环境搭建
 
   1、 下载Swig for Windows:http://www.swig.org/download.html
   2、 解压 .zip 文件到目录,比如:D:\backupsoftware
   3、 添加环境变量到path, 比如: D:\backupsoftware\swigwin-3.0.10
   4、 简单测试安装是否成功:
   打开Dos,在命令行执行: swig --help, 显示 Target Language Options即表明安装成功。

二、以c++为例

1、编写c++源文件
//example.h
#include <iostream>
using namespace std;
class Example{
public:
void say_hello();
};

//example.cpp

#include "example.h"

void Example::say_hello()
{
      printf("hello");
}

2、再写一个swig模块定义文件如下
%module example
%{
#include "example.h"
%}
%include "example.h"

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

    如果是使用C源码,则选项:$ swig -Python example.i

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


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

"""
setup.py file for SWIG C\+\+/Python example
"""
from distutils.core import setup, Extension
example_module = Extension('_example',
sources=['example.cpp''example_wrap.cxx',],
)
setup (name = 'example',
version = '0.1',
author = "www",
description = """Simple swig C\+\+/Python example""",
ext_modules = [example_module],
py_modules = ["example"],
)

注:swig生成的扩展模块对象名必须使用python模块名并在前面加上下划线_,刚才我们通过swig生成的python文件是example.py,所以这里的模块对象名必须是'_example',否则无法顺利编译。

5、编译
命令行中将当前工作目录切换到文件example.cpp,example_wrap.cxx,example.py,setup.py所在的目录,然后输入以下命令:
python setup.py build_ext --inplace

会在本目录下生成_example.pyd模块。

6、测试
import examlpe
example.Example().say_hello()

:如果导入模块失败,需要将模块所在路径添加到sys.path中,在次导入就会成功



posted on 2016-08-18 11:20 王海光 阅读(4623) 评论(0)  编辑 收藏 引用 所属分类: 脚本

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理