【发布时间】:2015-04-03 01:13:56
【问题描述】:
我正在尝试为 python 编写一个 C 扩展。使用代码(如下)我得到编译器警告:
implicit declaration of function ‘Py_InitModule’
它在运行时失败并出现此错误:
undefined symbol: Py_InitModule
我花了好几个小时寻找一个没有乐趣的解决方案。我已经尝试了对语法的多次细微更改,我什至发现了一个帖子表明该方法已被弃用。但是我找不到替代品。
代码如下:
#include <Python.h>
//a func to calc fib numbers
int cFib(int n)
{
if (n<2) return n;
return cFib(n-1) + cFib(n-2);
}
static PyObject* fib(PyObject* self,PyObject* args)
{
int n;
if (!PyArg_ParseTuple(args,"i",&n))
return NULL;
return Py_BuildValue("i",cFib(n));
}
static PyMethodDef module_methods[] = {
{"fib",(PyCFunction) fib, METH_VARARGS,"calculates the fibonachi number"},
{NULL,NULL,0,NULL}
};
PyMODINIT_FUNC initcModPyDem(void)
{
Py_InitModule("cModPyDem",module_methods,"a module");
}
如果有帮助,这里是我的 setup.py :
from distutils.core import setup, Extension
module = Extension('cModPyDem', sources=['cModPyDem.c'])
setup(name = 'packagename',
version='1.0',
description = 'a test package',
ext_modules = [module])
以及 test.py 中的测试代码:
import cModPyDem
if __name__ == '__main__' :
print(cModPyDem.fib(200))
任何帮助将不胜感激。
【问题讨论】:
-
你编译的 Python 版本是什么?
-
对不起,我正在用 python3 编译
标签: python c python-extensions