Saya mencoba mengkompilasi ekstensi python dengan cython di win 7 64-bit menggunakan mingw (64-bit).
Saya bekerja dengan Python 2.6 (Active Python 2.6.6) dan dengan file distutils.cfg yang memadai (mengatur mingw sebagai kompiler)
Saat menjalankan
> C:\Python26\programas\Cython>python setup.py build_ext --inplace
Saya mendapatkan pesan kesalahan yang mengatakan bahwa gcc tidak memiliki opsi -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 adalah:
C:\>gcc --version
gcc (GCC) 4.7.0 20110430 (experimental)
Copyright (C) 2011 Free Software Foundation, Inc.
Bagaimana saya bisa memperbaikinya?
Jawaban:
Sepertinya GCC 4.7.0 akhirnya menghapus
-mno-cygwin
opsi yang tidak digunakan lagi , tetapi distutils belum berhasil melakukannya. Instal versi MinGW yang sedikit lebih lama, atau editdistutils\cygwinccompiler.py
di direktori Python Anda untuk menghapus semua instance-mno-cygwin
.sumber
ld
kesalahan yang Anda dapatkan? Saya mengalami kesalahan yang sama, dan sedang berjuang untuk mengatasinya.Selama proses pemecahan ini dan masalah berikut yang saya temukan, saya menulis resep di utas ini . Saya mereproduksinya di sini seandainya bisa bermanfaat bagi orang lain:
Resep langkah demi langkah untuk mengkompilasi ekstensi cython 64-bit dengan python 2.6.6 dengan kompiler mingw di win 7 64-bit
Instal kompiler mingw
1) Instal tdm64-gcc-4.5.2.exe untuk kompilasi 64-bit
Terapkan patch ke python.h
2) Ubah python.h di C: \ python26 \ include seperti yang ditunjukkan di http://bugs.python.org/file12411/mingw-w64.patch
Modifikasi distutils
Sunting 2013: Catatan daripada di python 2.7.6 dan 3.3.3 -mno-cygwin akhirnya dihapus sehingga langkah 3 dapat dilewati .
3) Hilangkan semua parameter -mno-cygwin dari panggilan ke gcc di kelas Mingw32CCompiler di Python26 \ Lib \ distutils \ cygwinccompiler.py
4) Dalam modul yang sama, modifikasi get_msvcr () untuk mengembalikan daftar kosong alih-alih ['msvcr90 '] ketika msc_ver ==' 1500 '.
Buat file libpython26.a (tidak termasuk dalam 64 bit python)
Edit 2013: langkah 5-10 berikut dapat dilewati dengan mengunduh dan menginstal libpython26.a dari gohlke .
5) Dapatkan gendef.exe dari mingw-w64-bin_x86_64- mingw_20101003_sezero.zip (gendef.exe tidak tersedia di distribusi tmd64. Solusi lain adalah mengompilasi gendef dari sumber ...)
6) Salin python26.dll (terletak di C \ windows \ system32) ke direktori pengguna (C: \ Users \ myname)
7) Buat file python26.def dengan:
8) Pindahkan file python.def yang dihasilkan (terletak di folder tempat gendef dieksekusi) ke direktori pengguna
9) Hasilkan libpython.a dengan:
10) Pindahkan libpython26.a yang dibuat ke C: \ Python26 \ libs
Buat ekstensi .pyd Anda
11) Buat file test hello.pyx dan file setup.py seperti yang ditunjukkan dalam tutorial cython ( http://docs.cython.org/src/quickstart/build.html )
12) Kompilasi dengan
Selesai!
sumber
numpy/distutils
folder, keduanya untukmingw32compiler.py
.Bug ini sekarang telah diperbaiki dengan kandidat rilis Python 2.7.6 1 .
Komit patching ada di sini .
Utas pelacak masalah yang teratasi ada di sini .
sumber
Coba ini . Ini benar-benar berfungsi untuk kesalahan
https://github.com/develersrl/gccwinbinaries
sumber