测试环境
ubuntu版本:ubuntu-gnome-16.04-desktop-amd64,gnome版
python版本:python3.5.2
------------------------------------------------------------------------
SWIG是一种软件开发工具。它能让一些脚本语言调用C/C++语言的接口。它实现的方法是,通过编译程序将C/C++的声明文件(.i文件)编译成C/C++的包装器源代码(.c或.cxx)。通过直接调用这样的包装器接口,脚本语言可以间接调用C/C++语言的程序接口。SWIG支持的语言有:Perl, Python, Tcl, Ruby, Guile, and Java。使用SWIG通常不需要修改被包装的源程序代码,并且只需要几分钟就能生成你所需要的包装器源代码文件。
SWIG是Python中调用C代码的另一种方法。在这个方法中,开发人员必须编写一个额外的接口文件来作为SWIG(终端工具)的入口。Python开发者一般不会采用这种方法,因为大多数情况它会带来不必要的复杂。而当你有一个C/C++代码库需要被多种语言调用时,这将是个非常不错的选择。
1. 安装SWIG
执行:sudo apt-get install swig
2. 准备测试代码
is_palindrome函数可以用于检测一个字符串是否是回文,如:
"abcba" 是回文
"abcb" 不是回文
palindrome.c
#include <string.h> int is_palindrome(char *text) { int i, n = strlen(text); for (i = 0; i <= n/2; ++i) { if (text[i] != text[n-i-1]) return 0; } return 1; }
3. 编写swig接口描述文件
palindrome.i
%module palindrome %{ #include <string.h> %} extern int is_palindrome(char *text);
注:也可以尝试直接使用源代码的头文件
4. 运行SWIG
命令行下执行:swig -python palindrome.i
将生成两个文件,分别是palindrome.py和palindrome_wrap.c
5. 编译库
依次执行:
gcc -fPIC -c palindrome.c gcc -I/usr/include/python3.5m -c -fPIC palindrome_wrap.c gcc -shared -fPIC palindrome.o palindrome_wrap.o -o _palindrome.so
执行完后将生成_palindrome.so
6. 测试使用
执行python3进入解释器,执行下列操作:
>>> import _palindrome >>> >>> _palindrome.is_palindrome('12321') 1 >>> >>> _palindrome.is_palindrome('1231') 0 >>>