1. 编写两个文件, .c的源码文件, 内容可参考如下:
#include <stdio.h>
#include "Python.h"
int fac(int n) {
if (n < 2) return 1;
else return n * fac(n - 1);
}
static PyObject* fac_fac(PyObject* self, PyObject* args) {
int num;
if (!PyArg_ParseTuple(args, "i", &num)) {
return NULL;
}
return (PyObject*)Py_BuildValue("i", fac(num));
}
static PyMethodDef facMethods[] = {
{"fac", fac_fac, METH_VARARGS},
{NULL, NULL},
};
void initfac() {
Py_InitModule("fac", facMethods);
}
int main() {
return 0;
}
2. 后面就是利用python的distutils模块编译出C的SO库,文件名称为setup.py, 内容如下:
from distutils.core import setup, Extension
setup(name = "fac", ext_modules = [Extension("fac", sources = ["fac.c"])])
3. python setup.py build 会编译出产物到 build/ 下面, 后面在运行 sudo python setup.py install, 就会把so库安装到 /usr/local/lib/python2.7/dist-packages 下面, 此时这里就有一个 fac.so 文件, 如果你的模块名称是 fac 的话。
网友评论