本文共 1502 字,大约阅读时间需要 5 分钟。
本文的原文连接是: 未经博主允许不得转载。
SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, Tcl, Ruby and PHP。
最新的版本已经开始支持golang了。首先安装swig,官网网站最新的是3.0.6版本。
可以使用 yum install swig (这个安装的是2.0.10版本) 下载源代码直接安装最新。tar -zxvf swig-3.0.6.tar.gzcd swig-3.0.6./configuremakemake install#python 需要安装开发包yum install python-devel
首先创建example.i 接口文件:
/* example.i */ %module example %{ /* Put header files here or function declarations like below */ extern double My_variable; extern int fact(int n); extern int my_mod(int x, int y); extern char *get_time(); %} extern double My_variable; extern int fact(int n); extern int my_mod(int x, int y); extern char *get_time();
编写接口的实现文件example.c:
/* File : example.c */ #includedouble My_variable = 3.0; int fact(int n) { if (n <= 1) return 1; else return n*fact(n-1); } int my_mod(int x, int y) { return (x%y); } char *get_time() { time_t ltime; time(<ime); return ctime(<ime); }
编译python模块:
#编译python模块,会生成一个swig -python example.i 编译c文件,和wrap文件,使用python库编译gcc -c -fPIC example.c example_wrap.c -I/usr/include/python2.7#生成共享库ld -shared example.o example_wrap.o -o _example.so
测试python模块:
>>> import example>>> example.fact(5)120>>> example.my_mod(10,30)10>>> example.get_time()'Mon Aug 3 05:25:35 2015\n'>>> example.get_time()'Mon Aug 3 05:25:37 2015\n'>>> example.get_time()'Mon Aug 3 05:25:38 2015\n'
本文的原文连接是: 未经博主允许不得转载。
swig 非常方便的实现了python的模块扩展,可以将现有的c,c++库封装成模块提供给python调用。