Я пытаюсь написать расширение C для python. С кодом (ниже) я получаю предупреждение компилятора:Компилятор не может найти Py_InitModule() .. он устарел, и если да, то что я должен использовать?
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 вы компилируете? – MattDMo
Извините, я компилирую с python3 –