Cython ve mingw ile derlemek gcc: hata: tanınmayan komut satırı seçeneği '-mno-cygwin' üretir


114

Mingw (64-bit) kullanarak win 7 64-bit'te cython ile bir python eklentisi derlemeye çalışıyorum.
Python 2.6 (Active Python 2.6.6) ve yeterli distutils.cfg dosyasıyla çalışıyorum (derleyici olarak mingw'i ayarlayarak)

Yürütürken

> C:\Python26\programas\Cython>python setup.py build_ext --inplace

Gcc'nin -mno-cygwin seçeneği olmadığını söyleyen bir hata alıyorum:

> 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:

C:\>gcc --version
gcc (GCC) 4.7.0 20110430 (experimental)
Copyright (C) 2011 Free Software Foundation, Inc.

Nasıl düzeltebilirim?


İşte bir bağlantı ! Sorunu en son Cython ve MingW ile çözen
Indrajit Kanjilal

Yanıtlar:


181

Görünüşe göre GCC 4.7.0 nihayet kullanımdan kaldırılan -mno-cygwinseçeneği kaldırdı , ancak distutils henüz buna yetişmedi. Ya MinGW'nin biraz daha eski bir sürümünü kurun ya da distutils\cygwinccompiler.pyPython dizininizde tüm -mno-cygwin.


10
Teşekkürler Ignacio. Bu çözümü zaten kendim denedim (-mno-cygwin'i cygwinccompyler'dan kaldırmak için). Hata kayboldu ama sonra ld ile farklı bir hata aldım. Ancak bu farklı bir sorudur. Yarın postalayacağım. Şimdi biraz dinlenmeye ihtiyacınız var ... Windows'ta derlemek neden bu kadar zor?
joaquin

7
Bu benim için çalıştı. Ignacio'nun talimatlarını aynen takip ettim. Cygwincompile.py dosyasında "-mno-cygwin" dizesinin 4 örneği "" ile değiştirildi
Ram Narasimhan

4
@joaquin: Aldığınız ldhatayı sıralamayı başardınız mı ? Ben de aynı hatayla karşılaşıyorum ve bunu sıralamakta zorlanıyorum.
robintw

@robintw evet yaptım. O anda bir tarif yayınladım (Ve buldum!). Lütfen düzenlemeye bakın
joaquin

2
Python 2.7.9 bu sorunu çözdü. Python 2.7.8'de hala var.
fx-kirin

11

Bunları çözme sürecinde ve bulduğum aşağıdaki problemlerde bu konuya bir tarif yazdım . Başkaları için yararlı olabilir diye burada yeniden üretiyorum:


Win 7 64-bit'te mingw derleyicili python 2.6.6 ile 64-bit cython uzantılarını derlemek için adım adım tarif


Mingw derleyicisini kurun 1) 64-bit derleme için tdm64-gcc-4.5.2.exe dosyasını kurun

Python.h'ye yama uygulayın
2) http://bugs.python.org/file12411/mingw-w64.patch adresinde belirtildiği gibi C: \ python26 \ include içindeki python.h dosyasını değiştirin

Distutils
Edit 2013'ü değiştirin : python 2.7.6 ve 3.3.3'tekine dikkat edin -mno-cygwin nihayet kaldırıldı, böylece adım 3 atlanabilir .

3) Python26 \ Lib \ distutils \ cygwinccompiler.py'deki Mingw32CCompiler sınıfındaki gcc çağrısı için -mno-cygwin'in tüm parametrelerini ortadan kaldırın
4) Aynı modülde, get_msvcr () 'yi [' msvcr90 yerine boş bir liste döndürmek için değiştirin '] msc_ver ==' 1500 'olduğunda.

Libpython26.a dosyasını oluşturun (64 bit python'a dahil değildir)
Edit 2013: gohlke'den libpython26.a'yı indirip kurarak 5-10 arasındaki adımlar atlanabilir .

5) mingw-w64-bin_x86_64- mingw_20101003_sezero.zip'ten gendef.exe'yi edinin (gendef.exe tmd64 dağıtımında mevcut değildir. Başka bir çözüm de gendef'i kaynaktan derlemektir ...)
6) python26.dll dosyasını kopyalayın (C konumunda bulunur \ windows \ system32) kullanıcı dizinine (C: \ Users \ myname)
7) python26.def dosyasını şununla oluşturun:

gendef.exe C: \ Kullanıcılar \ myname \ python26.dll

8) Üretilen python.def dosyasını (gendef'in yürütüldüğü klasörde bulunur) kullanıcı dizinine taşıyın 9) libpython.a dosyasını
şununla oluşturun:

dlltool -v --dllname python26.dll --def C: \ Users \ myname \ python26.def --output-lib C: \ Users \ myname \ libpython26.a

10) Oluşturulan libpython26.a dosyasını C: \ Python26 \ libs konumuna taşıyın

.Pyd uzantınızı
oluşturun 11) Cython öğreticisinde ( http://docs.cython.org/src/quickstart/build.html ) belirtildiği gibi bir test hello.pyx dosyası ve bir setup.py dosyası oluşturun
12)

python setup.py build_ext --inplace

Bitti!


Win64 python27'de 1. adımı yaptım. Sonra denedim ve cython başarıyla kuruldu. 2. adımdaki yama ile ne yapacağım hakkında hiçbir fikrim yoktu
craastad

@Chris Raastad. İlginç. Ancak bu, cython kurulumu ile ilgili değil, cython bir komut dosyası derlemekle ilgili. Bunu kastettiğinden emin değilim. Her neyse, iki gün önce robintw'den kimlik hatasıyla ilgili bir açıklama geldi. Yani, gerçekten mingw çalışıyorsanız, belki de yüklediğiniz sürüme ve belki de önceden yüklediğiniz kitaplıklara ilk atışta gideceğinize veya hatalarla takılıp kalacağınıza bağlıdır.
joaquin

1
+1 Bu faydalı bir cevaptır. Numpy kullanan uzantılar numpy/distutilsiçin, her ikisi için de klasör içindeki seçenekleri kesmek zorunda kaldım mingw32compiler.py.
Caleb Hattingh

Python27'de MS_WIN64'ü cygwinccompiler.py dosyasına ekleyerek tanımlamanız gerekiyor gibi görünüyor. Buraya bakın: stackoverflow.com/a/19867426/2136991
David,

@David, OP'yi bağladığınız soruda python27'yi değil, python26'yı ifade ediyor. Tarifimi tam olarak uyguladınız ve yine de önerdiğiniz değişikliği yapmanız gerekiyor mu?
joaquin


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.