使用swig进行C/C++对Python的扩展
2013-05-06 21:22
676 查看
1、swig简介:
SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, Tcl, Ruby and PHP。支持语言列表中也包括非脚本编译语言,例如C#, Common Lisp (CLISP, Allegro CL, CFFI, UFFI), Java, Modula-3, OCAML以及R,甚至是编译器或者汇编的计划应用(Guile, MzScheme, Chicken)。SWIG普遍应用于创建高级语言解析或汇编程序环境,用户接口,作为一种用来测试C/C++或进行原型设计的工具。SWIG还能够导出XML或Lisp
s-expressions格式的解析树。SWIG可以被自由使用,发布,修改用于商业或非商业中。
2、使用swig进行C对Python的扩展
1)、编写mytest.c和mytest.h文件
mytest.h
mytest.c
2、编写mytest.i
mytest.i
第一部分是%module mytest,%module是SWIG脚本的一个命令,它表示生成的包装器将在一个模块内的名称。
第二部分是%{... %},这一部分的内容会原封不动的插入到 xxxx_wrap.c或 xxxx_wrap.cxx文件中。
第三部分就是剩下的部分了。这部分就是C语言或者C++语言的接口声明了。和C/C++的语法是一样的。
其实用
来代替
也是一样的。
3)、执行 swig -python mytest.i ,生成 mytest.py mytest_wrap.c
4)、执行gcc -shared -fpic -o _mytest.so -I/usr/include/python2.7 -I/usr/lib/python2.7/config mytest.c mytest_wrap.c,生成_mytest.so,注意一定是生成_mytest.so,如果写成mytest.so,在后面调用时会有错误:
5)、编写mypy.py
6)、执行 python mypy.py,可以看到打印结果。
SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, Tcl, Ruby and PHP。支持语言列表中也包括非脚本编译语言,例如C#, Common Lisp (CLISP, Allegro CL, CFFI, UFFI), Java, Modula-3, OCAML以及R,甚至是编译器或者汇编的计划应用(Guile, MzScheme, Chicken)。SWIG普遍应用于创建高级语言解析或汇编程序环境,用户接口,作为一种用来测试C/C++或进行原型设计的工具。SWIG还能够导出XML或Lisp
s-expressions格式的解析树。SWIG可以被自由使用,发布,修改用于商业或非商业中。
2、使用swig进行C对Python的扩展
1)、编写mytest.c和mytest.h文件
mytest.h
#ifndef __MYTEST_H__ #define __MYTEST_H__ void hello(); int add(int a,int b); #endif
mytest.c
#include<stdio.h> #include"mytest.h" void hello(){ printf("This is a test for swig and Python \n"); } int add(int a,int b){ return a+b; }
2、编写mytest.i
mytest.i
%module mytest %{ #include <stdio.h> #include "mytest.h" %} extern void hello(); extern int add(int a,int b);
第一部分是%module mytest,%module是SWIG脚本的一个命令,它表示生成的包装器将在一个模块内的名称。
第二部分是%{... %},这一部分的内容会原封不动的插入到 xxxx_wrap.c或 xxxx_wrap.cxx文件中。
第三部分就是剩下的部分了。这部分就是C语言或者C++语言的接口声明了。和C/C++的语法是一样的。
其实用
%include "mytest.h"
来代替
extern void hello(); extern int add(int a,int b);
也是一样的。
3)、执行 swig -python mytest.i ,生成 mytest.py mytest_wrap.c
4)、执行gcc -shared -fpic -o _mytest.so -I/usr/include/python2.7 -I/usr/lib/python2.7/config mytest.c mytest_wrap.c,生成_mytest.so,注意一定是生成_mytest.so,如果写成mytest.so,在后面调用时会有错误:
Traceback (most recent call last): File "mypy.py", line 1, in <module> import mytest ImportError: dynamic module does not define init function (initmytest)
5)、编写mypy.py
import mytest mytest.hello() print mytest.add(10,20)
6)、执行 python mypy.py,可以看到打印结果。
相关文章推荐
- 使用SWIG和Python对C/C++进行单元测试
- 使用swig实现C++的python扩展功能
- 使用SWIG对Python进行扩展
- centos7下使用swig扩展python接口来调用c++ 实现声纹识别
- 使用SWIG实现C++扩展Python
- 使用SWIG和Python对C/C++进行单元测试(一)
- 使用SWIG和Python对C/C++进行单元测试(二)
- 使用swig实现C++的python扩展功能
- SWIG and Python(用SWIG将C/C++封装为Python扩展模块)
- 使用C/C++ 扩展Python
- 使用swig把C++源码打包成python的.pyd类库
- 使用c++扩展python的功能
- 使用C++创建Pyd文件扩展Python模块
- 使用SWIG实现Python调用C/C++代码
- linux下使用SWIG实现Python调用C++ sdk读取相机图片
- 在VC++6.0中使用swig生成Python扩展的配置
- 使用C++扩展Python的功能
- windows平台使用Microsoft Visual C++ Compiler for Python 2.7编译python扩展
- 使用swig在python中调用c++代码
- 使用C/C++扩展Python