python - microsoft - cython windows
Compilar con cython y mingw produce gcc: error: opción de línea de comando no reconocida ''-mno-cygwin'' (4)
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 (Active Python 2.6.6) y con el archivo distutils.cfg adecuado (estableciendo mingw como compilador)
Cuando se ejecuta
> 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?
Durante el proceso de resolver estos y los siguientes problemas que encontré, escribí una receta en este hilo . Lo reproduzco aquí en caso de que pueda ser de utilidad para otros:
Receta paso a paso para compilar extensiones de cython de 64 bits con Python 2.6.6 con el compilador mingw en win 7 de 64 bits
Instalar el compilador mingw
1) Instale tdm64-gcc-4.5.2.exe para la compilación de 64 bits
Aplicar el parche a python.h
2) Modifique python.h en C: / python26 / include como se indica en http://bugs.python.org/file12411/mingw-w64.patch
Modificar distutils
Edición 2013: Nota que en python 2.7.6 y 3.3.3 -mno-cygwin ha sido eliminado finalmente para que el paso 3 pueda omitirse .
3) Eliminar todos los parámetros -mno-cygwin desde 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''.
Produzca el archivo libpython26.a (no incluido en Python de 64 bits)
Edición 2013: los siguientes pasos 5-10 se pueden omitir al descargar e instalar libpython26.a de gohlke .
5) Obtenga 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 desde la fuente ...)
6) Copie python26.dll (ubicado en C / windows / system32) en el directorio de usuario (C: / Users / myname)
7) Produzca el archivo python26.def con:
gendef.exe C: / Users / myname / python26.dll
8) Mueva el archivo python.def producido (ubicado en la carpeta desde donde se ejecutó gendef) al directorio de usuarios
9) Produzca el libpython.a con:
dlltool -v --dllname python26.dll --def C: / Users / myname / python26.def --output-lib C: / Users / myname / libpython26.a
10) Mueva el libpython26.a creado a C: / Python26 / libs
Produzca su extensión .pyd
11) Cree un archivo de prueba hello.pyx y un archivo setup.py como se indica en el tutorial de cython ( http://docs.cython.org/src/quickstart/build.html )
12) Compilar con
python setup.py build_ext --inplace
¡Hecho!
Este error ya se ha corregido en el lanzamiento de Python 2.7.6 candidato 1 .
El compromiso de parches está here .
El hilo del rastreador de problemas resuelto está bugs.python.org/issue12641 .
Parece que GCC 4.7.0 finalmente ha eliminado la -mno-cygwin
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
.
Prueba esto . Realmente funciona para el error
https://github.com/develersrl/gccwinbinaries