2010-09-23 12 views
8

¿Alguien ha tenido suerte al compilar módulos de extensión de Python de 64 bits para Windows usando mingw64?Extensiones de Python para Win64 a través de GCC

He compilado con éxito la extensión en cuestión con VS2008 para esta plataforma. También lo compilé con mingw32 (con una python de 32 bits). Preferiría que ambas versiones usen GCC.

Instalé el conjunto de herramientas mingw64-x86_64-w64 GCC 4.5.1 usando Cygwin y convencí a Python para usarlas. Sin embargo, el enlace con Python falló.

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

Ahora, como en this question, el único error de enlace que obtengo de Python es aproximadamente __imp_py_InitModule4. Navegando a través del archivo def, veo un símbolo Py_InitModule4_64.

¿Alguna idea?

+2

Sugiero que solicite ayuda al proyecto mingw-w64. Por lo general, son muy receptivos ... –

Respuesta

3

Hay un mecanismo en Python para evitar vincular un módulo con la versión incorrecta de la biblioteca. La función Py_InitModule4 se cambia el nombre a Py_InitModule4_64 (a través de una macro) cuando la biblioteca/módulo está compilado para una arquitectura 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 

Por lo tanto, si usted está recibiendo este error, esta significa que su biblioteca de Python, o su módulo de Python está compilado para una arquitectura de 32 bits, mientras que el otro está compilado para una arquitectura de 64 bits.

4

me parece que necesita para definir MS_WIN64, así como WIN32, también el paquete distutils no entiende mingw64, ver this puesto, y uno this

parches distutils para apoyar mingw64 es bastante trivial.

Cuestiones relacionadas