Próbuję skompilować rozszerzenie Pythona z cythonem w win 7 64-bit przy użyciu mingw (64-bit).
Pracuję z Pythonem 2.6 (Active Python 2.6.6) iz odpowiednim plikiem distutils.cfg (ustawiając mingw jako kompilator)
Podczas wykonywania
> C:\Python26\programas\Cython>python setup.py build_ext --inplace
Pojawia się błąd informujący, że gcc nie ma opcji -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 to:
C:\>gcc --version
gcc (GCC) 4.7.0 20110430 (experimental)
Copyright (C) 2011 Free Software Foundation, Inc.
Jak mogłem to naprawić?
Odpowiedzi:
Wygląda na to, że GCC 4.7.0 ostatecznie usunęło przestarzałą
-mno-cygwin
opcję, ale distutils jeszcze go nie dogonił. Zainstaluj nieco starszą wersję MinGW lub edytujdistutils\cygwinccompiler.py
w katalogu Pythona, aby usunąć wszystkie wystąpienia-mno-cygwin
.źródło
ld
błąd? Napotkałem ten sam błąd i staram się go rozwiązać.Podczas rozwiązywania tych i następnych problemów, które znalazłem, napisałem przepis w tym wątku . Odtwarzam go tutaj na wypadek, gdyby był przydatny dla innych:
Przepis krok po kroku na kompilację 64-bitowych rozszerzeń Cython w Pythonie 2.6.6 z kompilatorem mingw w systemie Windows 7 64-bit
Zainstaluj kompilator mingw
1) Zainstaluj tdm64-gcc-4.5.2.exe do kompilacji 64-bitowej
Zastosuj poprawkę do python.h
2) Zmodyfikuj python.h w C: \ python26 \ include, jak wskazano w http://bugs.python.org/file12411/mingw-w64.patch
Modyfikuj distutils
Edytuj 2013: Uwaga niż w Pythonie 2.7.6 i 3.3.3 -mno-cygwin został ostatecznie usunięty, więc krok 3 można pominąć .
3) Usuń wszystkie parametry -mno-cygwin z wywołania gcc w klasie Mingw32CCompiler w Python26 \ Lib \ distutils \ cygwinccompiler.py
4) W tym samym module zmodyfikuj get_msvcr () tak, aby zwracała pustą listę zamiast ['msvcr90 '], gdy msc_ver ==' 1500 '.
Stwórz plik libpython26.a (nie dołączony do 64-bitowego Pythona)
Edytuj 2013: poniższe kroki 5-10 można pominąć, pobierając i instalując libpython26.a z gohlke .
5) Uzyskaj plik gendef.exe z mingw-w64-bin_x86_64- mingw_20101003_sezero.zip (plik gendef.exe nie jest dostępny w dystrybucji tmd64. Innym rozwiązaniem jest skompilowanie gendef ze źródła ...)
6) Skopiuj plik python26.dll (znajdujący się w C \ windows \ system32) do katalogu użytkownika (C: \ Users \ myname)
7) Utwórz plik python26.def za pomocą:
8) Przenieś utworzony plik python.def (znajdujący się w folderze, z którego wykonano gendef) do katalogu użytkownika
9) Utwórz plik libpython.a za pomocą:
10) Przenieś utworzony plik libpython26.a do C: \ Python26 \ libs
Utwórz rozszerzenie .pyd
11) Utwórz testowy plik hello.pyx i plik setup.py, jak wskazano w samouczku cythona ( http://docs.cython.org/src/quickstart/build.html )
12) Skompiluj z
Gotowe!
źródło
numpy/distutils
folderze, zarówno dlamingw32compiler.py
.Ten błąd został już naprawiony w kandydacie do wydania 1 Pythona 2.7.6 .
Zatwierdzenie poprawek jest tutaj .
Rozwiązany wątek śledzenia problemów jest tutaj .
źródło
Spróbuj tego . To naprawdę działa w przypadku błędu
https://github.com/develersrl/gccwinbinaries
źródło