安装SWIG

mac下非常简单:brew install swig。其他平台可以在http://www.swig.org/下载安装应该也不难。

Python调用C方法

1. 准备一个简单的C文件 palindrome.c:

#include <string.h>

 

/**

* return: 0 — not palindrome

*         1 — is  palindrome

*/

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;

}

2. 再按照SWIG要求,准备一个.i文件(类似.h) palindrome.i:

%module palindrome

 

%{

#include <string.h>

%}

extern int is_palindrome(char* text);

3. 调用SWIG生成包装器,会生成两个新文件palindrome.py     palindrome_wrap.c

$ swig -python palindrome.i

4. 编译为so包

gcc -shared -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -L/System/Library/Frameworks/Python.framework/Versions/2.7/ *.c -lpython2.7 -o _palindrome.so

(如果不知道python安装路径,可以python -c “import sys;import pprint; pprint.pprint(sys.path);”查看一下)

5. 在python里调用palindrome_test.py:

import _palindrome

print dir(_palindrome)

mystr1 = “nopalindrome”

mystr2 = “ipreferpi”

print _palindrome.is_palindrome(mystr1)

print _palindrome.is_palindrome(mystr2)

 

Leave a Reply