Python-Erweiterungen für Win64 über GCC

8

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?

    
kwatford 23.09.2010, 12:32
quelle

3 Antworten

3

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.

    
Sylvain Defresne 03.11.2010, 09:14
quelle
4

Ich finde, Sie müssen sowohl MS_WIN64 als auch WIN32 definieren, auch das distutils-Paket versteht mingw64 nicht, siehe diesen Beitrag, und dies eins

Das Patchen von Distutils zur Unterstützung von mingw64 ist ziemlich trivial.

    
Jason Morgan 21.04.2011 15:33
quelle
0

Siehe 64BitCythonExtensionsOnWindows im Cython-Wiki. Sie empfehlen, MinGW-64 nicht zu verwenden.

    
Amit Moscovich 30.04.2014 14:35
quelle

Tags und Links