114 votes

La compilation avec cython et mingw produit gcc: error: option de ligne de commande non reconnue '-mno-cygwin'

J'essaie de compiler une extension python avec cython dans win 7 64 bits en utilisant mingw (64 bits).
Je travaille avec Python 2.6 (Active Python 2.6.6) et avec le fichier distutils.cfg adéquat (en définissant mingw comme compilateur)

Lors de l'exécution

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

J'ai une erreur en disant que gcc n'a pas l'option -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 est:

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

Comment pourrais-je le réparer?

181voto

Ignacio Vazquez-Abrams Points 312628

Il semblerait que GCC 4.7.0 ait finalement supprimé l’option -mno-cygwin obsolète, mais que distutils ne l’a pas encore rattrapé. Installez une version légèrement plus ancienne de MinGW ou modifiez distutils\cygwinccompiler.py dans votre répertoire Python pour supprimer toutes les instances de -mno-cygwin .

11voto

joaquin Points 22450

Au cours du processus de résolution de ces problèmes suivants, j'ai trouvé, j'ai écrit une recette dans ce fil. Je reproduis ici dans le cas où il pourrait être d'utilité pour les autres:


Étape par étape la recette pour compiler en 64 bits cython des extensions en python 2.6.6 avec le compilateur mingw sous win 7 64-bit

Installer le compilateur mingw
1) Installer tdm64-gcc-4.5.2.exe pour la version 64 bits de compilation

Appliquer le patch pour python.h
2) Modifier python.h en C:\python26\include comme indiqué dans http://bugs.python.org/file12411/mingw-w64.patch

Modifier distutils
Edit 2013: a Noter qu'en python 2.7.6 et 3.3.3 -mno-cygwin a finalement été retiré, afin de l'étape 3 peut être ignorée.

3) Éliminer tous les paramètres -mno-cygwin fom l'appel à gcc dans le Mingw32CCompiler classe Python26\Lib\distutils\cygwinccompiler.py
4) Dans le même module, modifier get_msvcr() pour renvoyer une liste vide au lieu de ['msvcr90'] quand msc_ver == '1500' .

Produire de la libpython26.un fichier (non inclus dans le 64 bits python)
Edit 2013: les étapes suivantes 5-10 peuvent être ignorés par le téléchargement et l'installation libpython26.un de gohlke.

5) Obtenir gendef.exe de mingw-w64-bin_x86_64- mingw_20101003_sezero.zip (gendef.exe n'est pas disponible dans la tmd64 de distribution. Un autre la solution consiste à compiler gendef à partir de la source...)
6) Copie python26.dll (situé dans C\windows\system32) à l'utilisateur répertoire (C:\Users\myname)
7) Produire le python26.fichier def avec:

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

8) placez le python.def fichier produit (situé dans le dossier où gendef a été exécuté) pour le répertoire de l'utilisateur
9) Produire le libpython.un avec:

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

10) Déplacer le créé libpython26.un de C:\Python26\libs

Produire votre .pyd extension
11) Créer un test bonjour.custode et d'un fichier setup.py fichier comme indiqué dans cython tutoriel (http://docs.cython.org/src/quickstart/build.html)
12) Compiler avec

python setup.py build_ext --en place

Fait!

9voto

Michael Points 631

Ce bug a maintenant été corrigé dans Python 2.7.6 release candidate 1 .

La validation du correctif est ici .

Le thread de suivi de problème résolu est ici .

-2voto

Selva Points 1

Essayez ceci. Cela fonctionne vraiment pour l’erreur
https://github.com/develersrl/gccwinbinaries

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X