10 votes

ImportError : le module dynamique ne définit pas de fonction init, mais il en définit une.

J'essaie d'écrire une liaison pour une bibliothèque C++ d'un fournisseur. J'ai utilisé avec succès des extraits tels que celui ci-dessous pour définir des fonctions init dans les autres modules, mais dans celui-ci, cela ne semble pas fonctionner : il compile bien, mais jette l'ImportError dès que j'essaie de l'importer dans un test script. Qu'est-ce qui peut bien se passer ici ?

#ifndef PyMODINIT_FUNC  /* declarations for DLL import/export */
#define PyMODINIT_FUNC void
#endif
PyMODINIT_FUNC initclient(void) {

    PyObject* m;

    ClientType.tp_new = PyType_GenericNew;
    if (PyType_Ready(&ClientType) < 0)
        return;

    m = Py_InitModule3("client", client_methods, "Client module");
    Py_INCREF(&ClientType);
    PyModule_AddObject(m, "Client", (PyObject *) &ClientType);

}

C'est sur Linux 32 bits, avec gcc 4.4.4.

0voto

Andre Holzner Points 6419

La documentation de swig mentionne ici :

Cette erreur est presque toujours provoquée lorsqu'un mauvais nom est donné au fichier d'objets partagés. Par exemple, si vous avez créé un fichier example.so au lieu de _example.so, vous obtiendrez cette erreur.

0voto

Dans le fichier d'interface, SWIG suggère d'utiliser :

#define SWIG_FILE_WITH_INIT

-3voto

djc Points 6761

Il s'est avéré que cela n'avait rien à voir avec Python ou le compilateur, mais qu'il s'agissait d'une incantation incorrecte du compilateur (je dois faire plus attention en éditant le Makefile).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X