先来一个网上随便都能找得到的例子吧:先来一个test.c
#include "test.h"
void test(){
printf("hello so\n");
}
float add(float a, float b){
return a+b;
}
在来一个test.h:
#include "stdio.h"
void test();
float add(float, float);
然后将其编译成.so文件:
gcc -fPIC -shared test.c -o libtest.so
最后在python文件里面调用:
#!/usr/bin/env python
print "start call so file\n"
from ctypes import *
test = cdll.LoadLibrary("./libtest.so")
test.test()
add =test.add
add.argtypes =[c_float, c_float]
add.restype =c_float
print add(1.3, 13.4)
然后在终端运行:
root@localhost:~/python/call_so# python test.py
start call so file
hello so
14.6999998093
嗯,python2的这个数字精度的bug也是醉了
当然了,ctypes不是这样简单的模块,否则也不会放到标准库里面去
(未完待续。。。)