2010-09-23 15 views
8

Hat jemand Glück gehabt, 64-Bit-Python-Erweiterungsmodule für Windows mit Mingw64 zu kompilieren?Python-Erweiterungen für Win64 über GCC

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 Werkzeuge mit Cygwin installiert und Python davon überzeugt, sie zu benutzen. Die Verbindung zu Python selbst ist jedoch fehlgeschlagen.

Also nahm ich pexports 0,44 auf, benutzte es, um eine python26.def Datei auszugeben und libpython26.a zu erstellen.

Nun, wie in this question, ist der einzige Link-Fehler, den ich von Python bekomme über __imp_py_InitModule4. Beim Durchsuchen der Def-Datei sehe ich ein Py_InitModule4_64 Symbol.

Irgendwelche Ideen?

+2

Ich würde vorschlagen, dass Sie das Mingw-W64-Projekt um Hilfe bitten. Sie sind normalerweise sehr reaktionsschnell ... –

Antwort

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 Py_InitModule4_64 umbenannt (über einen Makro), wenn die Bibliothek/Modul für eine 64-Bit-Architektur (siehe modsupport.h) kompiliert wird:

#if SIZEOF_SIZE_T != SIZEOF_INT 
/* On a 64-bit system, rename the Py_InitModule4 so that 2.4 
    modules cannot get loaded into a 2.5 interpreter */ 
#define Py_InitModule4 Py_InitModule4_64 
#endif 

Also, wenn Sie diesen Fehler, wenn es darum, diese bedeutet entweder Ihre Python-Bibliothek oder Ihr Python-Modul wird für eine 32-Bit-Architektur kompiliert, während das andere für eine 64-Bit-Architektur kompiliert wird.

4

Ich finde Sie brauchen MS_WIN64 sowie WIN32 zu definieren, auch die distutils Paket nicht versteht mingw64 finden this Post und this ein

distutils Patchen mingw64 zu unterstützen, ist ziemlich trivial.