Appeler une fonction C depuis un fichier Python. Obtenir une erreur lors de l’utilisation du fichier Setup.py

Mon problème est le suivant: je voudrais appeler une fonction C depuis mon fichier Python et renvoyer une valeur dans ce fichier Python. J’ai essayé la méthode suivante d’utilisation de C intégré dans Python (le code suivant est le code C appelé “mod1.c). J’utilise Python3.4 et le format suit celui donné dans les instructions de la documentation. Le problème survient lorsque j’appelle mon fichier d’installation (deuxième code ci-dessous). #include #include “sum.h”

static PyObject* mod_sum(PyObject *self, PyObject *args) { int a; int b; int s; if (!PyArg_ParseTuple(args,"ii",&a,&b)) return NULL; s = sum(a,b); return Py_BuildValue("i",s); } /* DECLARATION OF METHODS */ static PyMethodDef ModMethods[] = { {"sum", mod_sum, METH_VARARGS, "Descirption"}, // {"methName", modName_methName, METH_VARARGS, "Description.."}, modName is name of module and methName is name of method {NULL,NULL,0,NULL} }; // Module Definition Structure static struct PyModuleDef summodule = { PyModuleDef_HEAD_INIT, "sum", NULL, -1, ModMethods }; /* INITIALIZATION FUNCTION */ PyMODINIT_FUNC initmod(void) { PyObject *m; m = PyModule_Create(&summodule); if (m == NULL) return m; } 

Setup.py à partir de la configuration d’importation distutils.core, extension

 setup(name='buildsum', version='1.0', \ ext_modules=[Extension('buildsum', ['mod1.c'])]) 

Le résultat obtenu lorsque je comstack mon code à l’aide de gcc est l’erreur suivante: Impossible d’exporter PyInit_buildsum: symbole non défini.

J’apprécierais beaucoup toute idée ou aide sur ce problème, ou toute suggestion sur la façon d’appeler C depuis Python. Je vous remercie!

—————————————MODIFIER ———- ———————– Merci pour les commentaires: J’ai essayé ce qui suit:

 static PyObject* PyInit_sum(PyObject *self, PyObject *args) { int a; int b; int s; if (!PyArg_ParseTuple(args,"ii",&a,&b)) return NULL; s = sum(a,b); return Py_BuildValue("i",s); } 

Pour la première fonction; Cependant, je reçois toujours la même erreur de PyInit_sum: symbole non défini

Le code de travail ci-dessus au cas où quelqu’un rencontrerait la même erreur: la réponse de @dclarke est correcte. La fonction d’initialisation dans python 3 doit avoir pour nom PyInit_ (nom).

 #include  #include "sum.h" static PyObject* mod_sum(PyObject *self, PyObject *args) { int a; int b; int s; if (!PyArg_ParseTuple(args,"ii",&a,&b)) return NULL; s = sum(a,b); return Py_BuildValue("i",s); } /* DECLARATION OF METHODS*/ static PyMethodDef ModMethods[] = { {"modsum", mod_sum, METH_VARARGS, "Descirption"}, {NULL,NULL,0,NULL} }; // Module Definition Structure static struct PyModuleDef summodule = { PyModuleDef_HEAD_INIT,"modsum", NULL, -1, ModMethods }; /* INITIALIZATION FUNCTION*/ PyMODINIT_FUNC PyInit_sum(void) { PyObject *m; m = PyModule_Create(&summodule); return m; }