python中调用c库
2013-04-23 15:34:52| 分类: python核心编程 | 标签:python makefile |举报|字号 订阅
参考地址:http://my.oschina.net/ibmdw/blog/14750
http://blog.csdn.net/sraing/article/details/4384245
1、源文件
getstring.c getstring.h reverse.c reverse.h
getstring.c
getstring.h#include<stdio.h>
char *getstring(char *str,int num)
{
printf("%s\n",str);
return str;
}
reverse.cchar *getstring(char *str,int num);
reverse.h#include<stdio.h>
#include"getstring.h"
char *reverse(char *str,int num)
{
getstring(str,num);
int half = num / 2;
int i;
char temp;
for(i =0;i < half;++ i)
{
temp = str[num - 1 - i];
str[num - 1 - i] = str[i];
str[i] = temp;
}
printf("%s\n",str);
return str;
}
2、生产静态库.o文件#include<stdio.h>
char *reverse(char *str,int num);
1、 cc -c getstring.c
生成getstring.o文件
2、cc -c reverse.c getstring.h
生成reverse.o及getstring.h.gch
3、生成动态库.so文件
gcc -shared -fPCI -o libreverse.so reverse.o getstring.o
生成文件libreverse.so
4、在python中调用.so文件
>>> import ctypes
>>> so = ctypes.CDLL("./libreverse.so")
>>> fun = so.reverse
>>> fun("himan",5)
himan
namih
-1217157164
5、Makefile
reverse.so:getstring.o reverse.o
gcc -shared -fPCI -o libreverse.so reverse.o getstring.o
reverse.o:reverse.c getstring.h
cc -c reverse.c
getstring.o:getstring.c
cc -c getstring.c
clean:
rm -rf *.o *.so *.out *.gch
reverse.so:getstring.o reverse.o
@$(CC) -shared -fPCI -o $@ $^
.PHONY:clean
clean:
@$(RM) *.o *.so *.out *.gch
@是阻止命令输出
$(RM) = rm -f$(CC) = gcc
$@ = reverse.so所有目标
$^ = getstring.o reverse.o 所有依赖项
.PHONY = 伪目标