ImportError: Das dynamische Modul definiert die init-Funktion nicht, tut es aber

9

Ich versuche eine Bindung für eine C ++ - Bibliothek eines Anbieters zu schreiben. Ich habe erfolgreich Snippets wie die folgenden verwendet, um Init-Funktionen in den anderen Modulen zu definieren, aber in diesem scheint es nicht zu funktionieren: Es kompiliert gut, aber wirft den Importfehler, sobald ich versuche, es in einen Test zu importieren Skript. Was könnte hier falsch sein?

%Vor%

Dies ist auf 32-Bit-Linux mit gcc 4.4.4.

    
djc 18.02.2011, 13:29
quelle

7 Antworten

7

Ich hatte das gleiche Problem. Zur Kompilierzeit:

  • Pfad zum Python-Header: OK
  • Pfad zur Python-Bibliothek: OK
  • Link zur Python-Bibliothek: OK
  • Link zu benötigten Bibliotheken / Objektdateien von Drittanbietern: OK

Ich habe gerade vergessen, die C-Datei zu kompilieren, die mein Modul definiert ... Seufz ...

Also ja, das erste, was Sie überprüfen sollten: Ihr Makefile oder Ihr Kompilierbefehl! :)

    
lin3 14.05.2011 15:49
quelle
5

Ich hatte die gleiche Fehlermeldung, aber ich habe meine .c-Datei umbenannt und vergessen, den Namen im Code zu aktualisieren. Die Funktion "initxxx" und ein Argument darin.

    
dividebyzero 11.03.2013 17:17
quelle
5

Stellen Sie sicher, dass Sie keine Python-Versionen mischen. In Python Version 2 wurde die Init-Funktion Init_ aufgerufen, während in Version 3 diese Funktion PyInit _

genannt wird

In meinem Fall passierte dies, als SWIG 3.0.2 Python 3.4 zum Generieren von Bindungen verwendete, während meine Python-IDE den Python 2.7-Interpreter aufgerufen hat.

Sie können den Unterschied in der generierten .cxx-Datei sehen:

%Vor%

Unter Linux können Sie auch den folgenden Befehl verwenden, um Ihre .so-Exporte zu überprüfen:

%Vor%

Dies gibt Ihnen den Namen der Init-Funktion in Ihrer Bibliothek.

    
Klaas 04.12.2014 12:26
quelle
1

Stellen Sie sicher, dass Sie Ihre _wrap.cxx einbeziehen. Es scheint mir, dass es nicht in dein Modul kompiliert wird.

    
Jackie Lee 18.08.2013 19:23
quelle
0

Unter Linux kann es in diesem Fall helfen, strace auszuführen. Überprüfen Sie, ob der Name des Bibliothekspythons, nach dem gesucht wird, mit dem Namen der von Ihnen erstellten Bibliothek übereinstimmt.

    
demented hedgehog 21.03.2013 07:43
quelle
0

Die swig Dokumentation erwähnt hier :

  

Dieser Fehler wird fast immer verursacht, wenn der freigegebenen Objektdatei ein falscher Name zugewiesen wird. Wenn Sie beispielsweise eine Datei example.so anstelle von _example.so erstellt haben, erhalten Sie diesen Fehler.

    
Andre Holzner 06.06.2013 19:17
quelle
0

In der Schnittstellendatei empfiehlt SWIG:

%Vor%     
upretirementman 20.04.2015 18:17
quelle

Tags und Links