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 (définissant mingw comme compilateur)
Lors de l'exécution
> C:\Python26\programas\Cython>python setup.py build_ext --inplace
J'obtiens une erreur disant que gcc n'a pas d'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 résoudre ce problème?
Réponses:
Il semble que GCC 4.7.0 ait finalement supprimé l'
-mno-cygwin
option obsolète , mais distutils ne l'a pas encore rattrapée. Installez une version légèrement plus ancienne de MinGW ou modifiez-ladistutils\cygwinccompiler.py
dans votre répertoire Python pour supprimer toutes les instances de-mno-cygwin
.la source
ld
erreur que vous avez eue? J'ai rencontré la même erreur et j'ai du mal à la résoudre.Pendant le processus de résolution de ces problèmes et des problèmes suivants, j'ai écrit une recette dans ce fil . Je le reproduis ici au cas où cela pourrait être utile pour d'autres:
Recette étape par étape pour compiler des extensions cython 64 bits avec python 2.6.6 avec le compilateur mingw dans win 7 64 bits
Installer le compilateur mingw
1) Installer tdm64-gcc-4.5.2.exe pour la compilation 64 bits
Appliquer le correctif à python.h
2) Modifier python.h dans C: \ python26 \ include comme indiqué dans http://bugs.python.org/file12411/mingw-w64.patch
Modifier distutils
Edit 2013: Remarque que dans python 2.7.6 et 3.3.3 -mno-cygwin a finalement été supprimé, donc l'étape 3 peut être ignorée .
3) Eliminer 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 '.
Produisez le fichier libpython26.a (non inclus dans python 64 bits)
Edit 2013: les étapes 5 à 10 suivantes peuvent être ignorées en téléchargeant et en installant libpython26.a depuis 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 des sources ...)
6) Copiez python26.dll (situé à C \ windows \ system32) dans le répertoire utilisateur (C: \ Users \ myname)
7) Produisez le fichier python26.def avec:
8) Déplacez le fichier python.def produit (situé dans le dossier à partir duquel gendef a été exécuté) vers le répertoire utilisateur
9) Produisez la libpython.a avec:
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 tutoriel cython ( http://docs.cython.org/src/quickstart/build.html )
12) Compilez avec
Terminé!
la source
numpy/distutils
dossier, à la fois pourmingw32compiler.py
.Ce bogue a maintenant été corrigé dans la version candidate 1 de Python 2.7.6 .
Le commit de patch est ici .
Le thread de suivi des problèmes résolus est ici .
la source
Essaye ça . Cela fonctionne vraiment pour l'erreur
https://github.com/develersrl/gccwinbinaries
la source