Ich versuche, eine Python-Erweiterung mit Cython in Win 7 64-Bit mit Mingw (64-Bit) zu kompilieren.
Ich arbeite mit Python 2.6 (Active Python 2.6.6) und mit der entsprechenden Datei distutils.cfg (Einstellung von mingw als Compiler)
Bei der Ausführung
> C:\Python26\programas\Cython>python setup.py build_ext --inplace
Ich erhalte die Fehlermeldung, dass gcc keine Option -mno-cygwin hat:
> 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 das beheben?
Antworten:
Es hört sich so an, als hätte GCC 4.7.0 die veraltete
-mno-cygwin
Option endgültig entfernt , aber distutils hat sie noch nicht eingeholt. Installieren Sie entweder eine etwas ältere Version von MinGW oder bearbeiten Sie siedistutils\cygwinccompiler.py
in Ihrem Python-Verzeichnis, um alle Instanzen von zu entfernen-mno-cygwin
.quelle
ld
Fehler zu sortieren, den du bekommen hast? Ich bin auf den gleichen Fehler gestoßen und habe Mühe, ihn zu sortieren.Während der Lösung dieser und der folgenden Probleme habe ich ein Rezept in diesen Thread geschrieben . Ich reproduziere es hier, falls es für andere von Nutzen sein könnte:
Schritt für Schritt Rezept zum Kompilieren von 64-Bit-Cython-Erweiterungen mit Python 2.6.6 mit Mingw-Compiler in Win 7 64-Bit
Mingw- Compiler installieren 1) Installieren Sie tdm64-gcc-4.5.2.exe für die 64-Bit-Kompilierung
Patch auf python.h anwenden
2) Ändern Sie python.h in C: \ python26 \ include wie unter http://bugs.python.org/file12411/mingw-w64.patch angegeben
Distutils ändern
Edit 2013: Hinweis als in Python 2.7.6 und 3.3.3 -mno-cygwin wurde endgültig entfernt, damit Schritt 3 übersprungen werden kann .
3) Entfernen Sie alle Parameter -mno-cygwin aus dem Aufruf von gcc in der Mingw32CCompiler-Klasse in Python26 \ Lib \ distutils \ cygwinccompiler.py.
4) Ändern Sie im selben Modul get_msvcr (), um eine leere Liste anstelle von ['msvcr90 zurückzugeben '] wenn msc_ver ==' 1500 '.
Erstellen Sie die Datei libpython26.a (nicht in 64-Bit-Python enthalten).
Bearbeiten 2013: Die folgenden Schritte 5 bis 10 können übersprungen werden, indem libpython26.a von gohlke heruntergeladen und installiert wird .
5) Beziehen Sie gendef.exe von mingw-w64-bin_x86_64-mingw_20101003_sezero.zip (gendef.exe ist in der tmd64-Distribution nicht verfügbar. Eine andere Lösung besteht darin, gendef aus der Quelle zu kompilieren ...)
6) Kopieren Sie python26.dll (befindet sich bei C. \ windows \ system32) in das Benutzerverzeichnis (C: \ Users \ myname)
7) Erstellen Sie die Datei python26.def mit:
8) Verschieben Sie die erstellte Datei python.def (in dem Ordner, in dem gendef ausgeführt wurde) in das Benutzerverzeichnis.
9) Erstellen Sie die Datei libpython.a mit:
10) Verschieben Sie die erstellte libpython26.a nach C: \ Python26 \ libs
Erstellen Sie Ihre .pyd-Erweiterung. 11) Erstellen Sie eine Testdatei "hello.pyx" und eine Datei "setup.py", wie im cython-Lernprogramm ( http://docs.cython.org/src/quickstart/build.html ) angegeben.
12) Kompilieren Sie mit
Getan!
quelle
numpy/distutils
Ordners hacken , sowohl fürmingw32compiler.py
.Dieser Fehler wurde jetzt in Python 2.7.6 Release Candidate 1 behoben .
Das Patching-Commit ist hier .
Der Thread zum Problem-Tracker ist hier .
quelle
Versuche dies . Es funktioniert wirklich für den Fehler
https://github.com/develersrl/gccwinbinaries
quelle