Hat jemand Glück gehabt, 64-Bit-Python-Erweiterungsmodule für Windows mit mingw64 zu kompilieren?
Ich habe die fragliche Erweiterung mit VS2008 für diese Plattform erfolgreich kompiliert. Ich habe es auch mit mingw32 (mit einem 32-Bit-Python) kompiliert. Ich würde beide Builds bevorzugen, um GCC zu verwenden.
Ich habe die mingw64-x86_64-w64 GCC 4.5.1-Tools unter Verwendung von Cygwin installiert und Python davon überzeugt, sie zu verwenden. Die Verbindung zu Python selbst ist jedoch fehlgeschlagen.
Also habe ich pexports 0.44 abgeholt, damit eine python26.def
-Datei gelöscht und libpython26.a
erstellt.
Nun, wie in diese Frage , der einzige Linkfehler Ich bekomme von Python ungefähr __imp_py_InitModule4
. Beim Durchsuchen der Def-Datei sehe ich ein Py_InitModule4_64
-Symbol.
Irgendwelche Ideen?
In Python gibt es einen Mechanismus, um zu verhindern, dass ein Modul mit der falschen Version der Bibliothek verknüpft wird. Die Py_InitModule4-Funktion wird in Py_InitModule4_64 (über ein Makro) umbenannt, wenn die Bibliothek / das Modul für eine 64-Bit-Architektur kompiliert wird (siehe modsupport.h):
%Vor%Wenn Sie also diesen Fehler erhalten, bedeutet dies entweder Ihre Python-Bibliothek oder Ihr Python-Modul wird für eine 32-Bit-Architektur kompiliert, während der andere für eine 64-Bit-Architektur kompiliert wird.
Siehe 64BitCythonExtensionsOnWindows im Cython-Wiki. Sie empfehlen, MinGW-64 nicht zu verwenden.