Estoy tratando de compilar una extensión de python con cython en win 7 de 64 bits usando mingw (64 bits).
Estoy trabajando con Python 2.6 (Active Python 2.6.6) y con el archivo distutils.cfg adecuado (configurando mingw como compilador)
Al ejecutar
> C:\Python26\programas\Cython>python setup.py build_ext --inplace
Recibo 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 arreglarlo?
Respuestas:
Parece que GCC 4.7.0 finalmente eliminó la
-mno-cygwin
opción obsoleta , pero distutils aún no la ha alcanzado. Instale una versión un poco más antigua de MinGW o editedistutils\cygwinccompiler.py
en su directorio de Python para eliminar todas las instancias de-mno-cygwin
.fuente
ld
error que recibiste? Me encontré con el mismo error y estoy luchando por solucionarlo.Durante el proceso de resolución de estos y los siguientes problemas que encontré, escribí una receta en este hilo . Lo reproduzco aquí por si pudiera ser de utilidad para otros:
Receta paso a paso para compilar extensiones cython de 64 bits con python 2.6.6 con el compilador mingw en win 7 de 64 bits
Instale 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) Modificar python.h en C: \ python26 \ include como se indica en http://bugs.python.org/file12411/mingw-w64.patch
Modificar distutils
Edit 2013: tenga en cuenta que en python 2.7.6 y 3.3.3 -mno-cygwin finalmente se ha eliminado, por lo que se puede omitir el paso 3 .
3) Elimine todos los parámetros -mno-cygwin de 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 descargando e instalando libpython26.a desde 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) al directorio de usuarios (C: \ Users \ myname)
7) Produzca el archivo python26.def con:
8) Mueva el archivo python.def producido (ubicado en la carpeta desde donde se ejecutó gendef) al directorio de usuario
9) Produzca libpython.a con:
10) Mueva el libpython26.a creado a C: \ Python26 \ libs
Produzca su extensión .pyd
11) Cree un archivo hello.pyx de prueba y un archivo setup.py como se indica en el tutorial de cython ( http://docs.cython.org/src/quickstart/build.html )
12) Compile con
¡Hecho!
fuente
numpy/distutils
carpeta, tanto paramingw32compiler.py
.Este error ahora se ha corregido en la versión candidata 1 de Python 2.7.6 .
El compromiso de parcheo está aquí .
El hilo de seguimiento de problemas resuelto está aquí .
fuente
Prueba esto . Realmente funciona para el error
https://github.com/develersrl/gccwinbinaries
fuente