file: sample.c
#include //C function
int add(int arg1, int arg2)
{
return arg1 + arg2;
}
//add wrapped function
static PyObject* wrap_add(PyObject *self, PyObject *args)
{
//Convert the python input objects into C objects
int arg1, arg2;
if(!PyArg_ParseTuple(args, "ii", &arg1, &arg2))
return NULL;
//Call c function
int result = add(arg1,arg2);
//wrap the result from c function to python object.
return (PyObject*)Py_BuildValue("i", result);
}
//define the PyMethodDef methods
static PyMethodDef wrap_methods[] ={
{"add", wrap_add, METH_VARARGS},
{NULL, NULL}
};
//initilization function
PyMODINIT_FUNC initsample(void)
{
Py_InitModule("sample", wrap_methods);
}
注意:C文件名sample和PyMODINIT_FUNC initsample(void)以及 Py_InitModule("sample"中的红色部分必须一致。
1、编码:
上述代码中红色部分是需要根据需求进行修改的,其他部分是固定不变的。
2、编译:
gcc -fpic -c -I /usr/include/python2.7 test.c
gcc -shared -o test.so test.o
3、python运行
在python命令行中执行:
>>> import test
>>> test.add(1,2)
参考
:
http://www.ibm.com/developerworks/cn/linux/l-pythc/index.html
http://bbs.chinaunix.net/thread-1593255-1-1.html