Das Kompilieren mit Cython und Mingw erzeugt gcc: error: unerkannte Kommandozeilenoption '-mno-cygwin'
Ich versuche zu kompilieren, eine python-Erweiterung mit cython in win 7 64-bit mit mingw (64-bit).
Ich arbeite mit Python 2.6 (Active Python 2.6.6) und mit der angemessenen distutils.cfg-Datei (Einstellung mingw als compiler)
Beim ausführen
> C:\Python26\programas\Cython>python setup.py build_ext --inplace
Bekomme ich eine Fehlermeldung, dass gcc nicht -mno-cygwin-option:
> 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 ist:
C:\>gcc --version
gcc (GCC) 4.7.0 20110430 (experimental)
Copyright (C) 2011 Free Software Foundation, Inc.
Wie könnte ich es beheben?
InformationsquelleAutor der Frage joaquin | 2011-05-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es klingt wie GCC 4.7.0 hat schließlich entfernt die veralteten
-mno-cygwin
option, aber distutils noch nicht eingeholt. Installieren Sie entweder eine etwas ältere version von MinGW oder Bearbeitendistutils\cygwinccompiler.py
in Ihrem Python-Verzeichnis zu entfernen Sie alle Instanzen von-mno-cygwin
.InformationsquelleAutor der Antwort Ignacio Vazquez-Abrams
Während des Prozesses der Lösung dieser und die folgenden Probleme, die ich gefunden habe, schrieb ich ein Rezept in dieser thread. Ich Schreibe es hier, falls es sein könnte Dienstprogramm für die anderen:
Schritt-für-Schritt Rezept zum kompilieren von 64-bit-cython-Erweiterungen mit python
2.6.6 mit mingw compiler unter win 7 64-bit
Installieren Sie mingw compiler
1) Installieren tdm64-gcc-4.5.2.exe für 64-bit-Kompilierung
Patch anwenden zu python.h
2) Ändern in python.h in C:\python26\include wie in
http://bugs.python.org/file12411/mingw-w64.patch
Ändern distutils
Edit 2013: Hinweis als in python 2.7.6 und 3.3.3 -mno-cygwin wurde schließlich entfernt, so dass Schritt 3 kann übersprungen werden.
3) Beseitigen Sie alle Parameter -mno-cygwin fom der Aufruf von gcc, die in der
Mingw32CCompiler Klasse in Python26\Lib\distutils\cygwinccompiler.py
4) In dem gleichen Modul, ändern get_msvcr() eine leere Liste zurück
anstelle von ['msvcr90'] wenn msc_ver == '1500' .
Produzieren die libpython26.eine Datei (nicht in 64-bit-python)
Edit 2013: die folgenden Schritte 5 bis 10, können übersprungen werden, durch das herunterladen und installieren libpython26.eine von gohlke.
5) Erhalten gendef.exe von mingw-w64-bin_x86_64-
mingw_20101003_sezero.zip
(gendef.exe ist nicht verfügbar in der tmd64 Verteilung. Ein weiteres
Lösung ist die Erstellung gendef von der Quelle...)
6) Kopieren python26.dll (befindet sich unter C\windows\system32), um den Benutzer
Verzeichnis (C:\Users\myname)
7) die python26.def-Datei mit:
8) Bewegen Sie die python.def-Datei erzeugt (in dem Ordner befinden, von wo aus
gendef ausgeführt wurde), um das Benutzer-Verzeichnis
9) die libpython.ein mit:
10) Verschieben Sie die erstellte libpython26.ein zu C:\Python26\libs
Produzieren .pyd-Erweiterung
11) Erstellen Sie eine test-Hallo.pyx-Datei und eine setup.py die Datei wie angegeben in
cython tutorial (http://docs.cython.org/src/quickstart/build.html)
12) Kompilieren mit
Getan!
InformationsquelleAutor der Antwort joaquin
Dieser bug wurde nun behoben in Python 2.7.6 release candidate 1.
Dem patchen Begehen ist hier.
Das Problem behoben tracker thread ist hier.
InformationsquelleAutor der Antwort Michael
Versuchen . Es funktioniert wirklich für die Fehler
https://github.com/develersrl/gccwinbinaries
InformationsquelleAutor der Antwort Selva