2011-05-17 12 views
110

Estoy tratando de compilar una extensión de python con cython en win 7 de 64 bits usando mingw (64-bit).
estoy trabajando con Python 2.6 (Python activo 2.6.6) y con el archivo distutils.cfg adecuada (ajuste MinGW como el compilador)Compilar con cython y mingw produce gcc: error: opción de línea de comando no reconocida '-mno-cygwin'

Al ejecutar

> C:\Python26\programas\Cython>python setup.py build_ext --inplace 

me sale un error que dice que gcc no tiene una opción -mno-cygwin:

> C:\Python26\programas\Cython>python setup.py build_ext --inplace 
running build_ext 
skipping 'hello2.c' Cython extension (up-to-date) 
building 'hello2' extension 
C:\mingw\bin\gcc.exe -mno-cygwin -mdll -O -Wall -IC:\Python26\include -IC:\Python26\PC -c hello2.c -o build\temp.win-amd64-2.6\Release\hello2.o 
gcc: error: unrecognized command line option '-mno-cygwin' 
error: command 'gcc' failed with exit status 1 

gcc es:

C:\>gcc --version 
gcc (GCC) 4.7.0 20110430 (experimental) 
Copyright (C) 2011 Free Software Foundation, Inc. 

¿Cómo podría solucionarlo?

+0

Aquí hay [un enlace] (https://stackoverflow.com/a/43971456/4628439)! Eso soluciona el problema con las últimas Cython y MingW –

Respuesta

178

Parece que GCC 4.7.0 finalmente ha eliminado la opción obsoleta -mno-cygwin, pero distutils aún no se ha puesto al día con ella. Instale una versión ligeramente anterior de MinGW o edite distutils\cygwinccompiler.py en su directorio de Python para eliminar todas las instancias de -mno-cygwin.

+10

Gracias Ignacio. Ya probé esta solución yo solo (para eliminar -mno-cygwin de cygwinccompyler). El error desapareció pero luego recibí un error diferente con ld. Pero esta es una pregunta diferente. Lo publicaré mañana. Ahora necesito descansar ... ¿por qué es tan difícil de compilar en Windows? – joaquin

+9

Estamos trabajando en un parche para distutils: http://bugs.python.org/issue12641 –

+7

Esto es lo que funcionó para mí. Seguí las instrucciones de Ignacio al pie de la letra. Se reemplazaron 4 instancias de la cadena "-mno-cygwin" por "" en el archivo cygwincompile.py –

11

Durante el proceso de resolver estos y los siguientes problemas que encontré, escribí una receta en this thread. Lo reproduzco aquí en caso de que podría ser de utilidad para otros:


Paso a paso la receta para compilar 64 bits Cython extensiones con Python 2.6.6 con el compilador MinGW en la victoria 7 de 64 bits

Instalar compilador MinGW
1) Instalar tdm64-gcc-4.5.2.exe para la compilación de 64 bits

Aplique el parche Python.h
.210 2) modificar Python.h en C: \ Python26 \ incluir como se indica en http://bugs.python.org/file12411/mingw-w64.patch

Modificar distutils
Editar 2013: Nota que en pitón 2.7.6 y 3.3.3 -mno-cygwin ha sido finalmente eliminado para que el paso 3 se pueda omitir.

3) Eliminar todos los parámetros -mno-cygwin FOM la llamada a GCC en la clase Mingw32CCompiler en Python26 \ Lib \ distutils \ cygwinccompiler.py
4) En el mismo módulo, modifique get_msvcr() para devolver una lista vacía en lugar de ['msvcr90'] cuando msc_ver == '1500'.

producir el archivo de libpython26.a (no incluido en pitón 64 bit)
Editar 2013: los pasos 5-10 siguientes se pueden saltar por la descarga y la instalación de libpython26.a de gohlke.

5) Obtener gendef.exe de MinGW-W64-bin_x86_64- mingw_20101003_sezero.zip (gendef.exe no está disponible en la distribución tmd64. Otra solución es compilar gendef de la fuente ...)
6) Copia python26.dll (ubicado en C \ windows \ system32) en el directorio de usuario (C: \ Users \ myname)
7) generan el archivo python26.def con:

gendef.exe C:\Users\myname\python26.dll

8) Mover el archivo python.def producido (que se encuentra en la carpeta desde donde fue ejecutado gendef) en el directorio de usuario
9) producir el libpython.a con:

dlltool -v --dllname python26.dll --def C:\Users\myname \python26.def --output-lib C:\Users\myname\libpython26.a

10) Mover el libpython26 creado. a a C: \ P ython26 \ libs

producir su extensión .pyd
11) Crear un archivo hello.pyx prueba y un archivo setup.py como se indica en tutorial Cython (http://docs.cython.org/src/quickstart/build.html)
12) compilar con

python setup.py build_ext --inplace

¡Listo!

+0

Hice el paso 1 en win64 python27. Luego lo intenté y cython se instaló con éxito. No tenía idea de qué hacer con el parche en el paso 2. – craastad

+0

@Chris Raastad. Interesante. Pero esto no se trata de la instalación de cython, sino de la compilación de cython de un script. No estoy seguro si querías decir eso. De todos modos, hace dos días hubo un comentario de robintw sobre tener el error ld. Por lo tanto, si realmente tiene Mingw funcionando, tal vez dependa de la versión que instale y de las bibliotecas que ya tiene instaladas, vaya al primer disparo o se quede atascado con errores. – joaquin

+1

+1 Esta es una respuesta útil. Para las extensiones que usan numpy, también tuve que hackear las opciones dentro de la carpeta 'numpy/distutils', ambas para' mingw32compiler.py'. –

Cuestiones relacionadas