web-dev-qa-db-fra.com

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

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

Lors de l'exécution

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

Je reçois 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?

114
joaquin

On dirait que GCC 4.7.0 a finalement supprimé les obsolètes -mno-cygwin _ option, mais distutils ne l’a pas encore rattrapée. 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.

181

Au cours du processus de résolution de ces problèmes et des problèmes suivants, j’ai trouvé une recette dans ce fil . Je le reproduis ici au cas où il pourrait être utile à d’autres:


Recette pas à pas pour compiler des extensions cython 64 bits avec python 2.6.6 avec le compilateur mingw dans le programme win 7 64 bits

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

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

Modifie distutils
Edit 2013: Remarque que dans python 2.7.6 et 3.3.3 -mno-cygwin a été finalement supprimé, donc l'étape 3 peut être ignorée =.

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

Produit le fichier libpython26.a (non inclus dans le python 64 bits)
Edit 2013: les étapes 5 à 10 suivantes peuvent être ignorées en téléchargeant et en installant libpython26.a à partir de gohlke.

5) Obtenez gendef.exe à partir de mingw-w64-bin_x86_64- mingw_20101003_sezero.Zip (gendef.exe n'est pas disponible dans la distribution tmd64. Une autre solution consiste à compiler gendef à partir du code source ...)
6) Copiez python26.dll (situé dans C\Windows\System32) dans le répertoire de l'utilisateur (C:\Users\myname).
7) Produisez le fichier python26.def avec:

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

8) Déplacez le fichier python.def produit (situé dans le dossier où gendef a été exécuté) dans le répertoire utilisateur.
9) Produisez la libpython.a avec:

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

10) Déplacez le libpython26.a créé vers C:\Python26\libs

Produisez votre extension .pyd
11) Créez un fichier test hello.pyx et un fichier setup.py comme indiqué dans le didacticiel Cython ( http://docs.cython.org/src/quickstart/build.html )
12) Compiler avec

python setup.py build_ext --inplace

Terminé!

11
joaquin

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

Le commit des correctifs est ici .

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

9
Michael