2011-09-20 14 views
5

Estoy tratando de construir una extensión de python DLL en una máquina Win7 de 64 bits utilizando cygwin (ya que cygwin solo se ejecuta como proceso de 32 bits, esto es en realidad compilación cruzada).Construyendo 64bit libpython27.a usando cygwin, dlltool

creé libpython27.a a mí mismo de python27.dll usando dlltool (como se explica, por ejemplo, here), pero la acumulación de fallar durante la fase enlazador diciendo
skipping incompatible c:\Python27\libs/libpython27.a when searching for -lpython27
Esto es exactamente informó el error here (donde la tipo terminó moviéndose al compilador de MSVC ...).

Más información:
- Python 2.7.2 activa, Win64, 64
- versión más reciente de cygwin, usando el compilador /usr/bin/x86_64-w64-mingw32-g++.exe

¿El Alguien sabe si esto es compatible?
¿Hay alguna forma de usar dlltool que echo de menos aquí?

(lo hice conocer here la guía para utilizar
dlltool --as-flags=--64 -m i386:x86-64 -k -l libpython27.a -d python.def
pero al hacerlo me dieron "invalid bfd target" error de dlltool)

Gracias!

Actualización: Creo que se puede hacer porque Enthought python contiene dicho archivo. Me gustaría crear uno para las distribuciones más comunes que no lo contienen.

+0

Bueno, si supiéramos sobre la bandera, no sería _secret_ ¿o sí? – brc

Respuesta

0

no estoy seguro de lo útil que encuentre esto, pero en la parte inferior de la página vinculada a que hay un enlace a here - Donde dice:

No utilizar MinGW-W64. Como notará, la biblioteca de importación de MinGW para Python (por ejemplo, libpython27.a) se ha omitido de la versión AMD64 de Python. Esto es deliberado. No intente crear uno con dlltool. Aún no hay una versión oficial de MinGW-w64, todavía está en "beta" y se considera inestable, aunque puede obtener una compilación de 64 bits de, p. Ej. TDM-GCC. También ha habido problemas con el tiempo de ejecución de mingw que entra en conflicto con el tiempo de ejecución de MSVC; esto puede suceder desde lugares que no espera , como bibliotecas de tiempo de ejecución internas para g ++ o gfortran. Para manténgase en el lado seguro, evite MinGW-w64 por ahora.

+0

Sí, lo he visto, no estoy seguro de qué tan confiable es esta información. Por ejemplo, en Enthought python libpython27.a no se omite incluso en la versión AMD64. –

1

El problema es que está utilizando la dlltool de 32 bits. Probablemente en C: \ MinGW \ bin en lugar de C: \ MinGW64 \ bin. Puede cambiar su ruta, o ejecutar la herramienta de 64 bits específicamente como tal:

C:\MinGW64\bin\dlltool -v --dllname python27.dll --def python27.def --output-lib libpython27.a