Extensiones Python para Win64 a través de GCC

¿Alguien ha tenido suerte con la comstackción de módulos de extensión de Python de 64 bits para Windows usando mingw64?

He comstackdo exitosamente la extensión en cuestión con VS2008 para esta plataforma. También lo he comstackdo con mingw32 (con un python de 32 bits). Preferiría ambas versiones para usar GCC.

He instalado el conjunto de herramientas mingw64-x86_64-w64 GCC 4.5.1 usando Cygwin y convencí a Python para que las use. Sin embargo, el enlace a python en sí falló.

Así que tomé pexports 0.44, lo usé para volcar un archivo python26.def y crear libpython26.a .

Ahora, como en esta pregunta , el único error de enlace que recibo de Python es sobre __imp_py_InitModule4 . Navegando a través del archivo def, veo un símbolo Py_InitModule4_64 .

¿Algunas ideas?

Hay un mecanismo en Python para evitar vincular un módulo con la versión incorrecta de la biblioteca. La función Py_InitModule4 cambia su nombre a Py_InitModule4_64 (a través de una macro) cuando la biblioteca / módulo se comstack para una architecture de 64 bits (ver modsupport.h):

 #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 

Entonces, si está recibiendo este error, esto significa que su biblioteca de Python o su módulo de Python se comstackn para una architecture de 32 bits, mientras que el otro se comstack para una architecture de 64 bits.

Creo que es necesario definir MS_WIN64 así como WIN32, además el paquete distutils no comprende mingw64, vea esta publicación y esta

La aplicación de parches para soportar mingw64 es bastante trivial.

Vea 64BitCythonExtensionsOnWindows en la wiki de Cython. Recomiendan contra el uso de MinGW-64.