साइथॉन और मिंगव के साथ संकलित करने से gcc उत्पन्न होता है: त्रुटि: गैर-मान्यताप्राप्त कमांड लाइन विकल्प '-mno-cyg201'


114

मैं साइथन के साथ एक अजगर विस्तार को 7 64-बिट में मिंगव (64-बिट) का उपयोग करके संकलित करने की कोशिश कर रहा हूं।
मैं Python 2.6 (Active Python 2.6.6) के साथ और पर्याप्त डिस्टुटिल्स के साथ काम कर रहा हूं। Ff फाइल (संकलक के रूप में mingw सेटिंग)

जब निष्पादित

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

मुझे यह कहते हुए एक त्रुटि मिलती है कि gcc के पास कोई -mg-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 है:

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

मैं इसे कैसे ठीक कर सकता हूं?


यहाँ एक लिंक है ! नवीनतम साइथॉन और मिंगडब्ल्यू के साथ समस्या को हल करें
इंद्रजीत कांजीलाल

जवाबों:


181

ऐसा लगता है कि जीसीसी 4.7.0 ने अंततः हटाए गए -mno-cygwinविकल्प को हटा दिया है , लेकिन डिस्टिलिट्स अभी तक इसे पकड़ नहीं पाए हैं। या तो MinGW का थोड़ा पुराना संस्करण स्थापित करें, या distutils\cygwinccompiler.pyअपने पायथन डायरेक्टरी में संपादित करें ताकि सभी उदाहरणों को हटाया जा सके -mno-cygwin


10
धन्यवाद इग्नासियो। मैंने पहले से ही इस समाधान को खुद से करने की कोशिश की (-mg-cygwin से cygwinccompyler को खत्म करने के लिए)। त्रुटि गायब हो गई लेकिन फिर मुझे ld के साथ एक अलग त्रुटि मिली। लेकिन यह एक अलग सवाल है। मैं इसे कल पोस्ट करूंगा। अब कुछ आराम की जरूरत है ... खिड़कियों में संकलन करना इतना मुश्किल क्यों है?
जोकिन

7
इसी से मेरा काम बना है। मैंने इग्नासियो के निर्देशों का पालन किया। Cygwincompile.py फ़ाइल में "" -mno-cygwin "" के साथ "" के 4 उदाहरण दिए गए हैं
राम नरसिम्हन

4
@joaquin: क्या आपको उस ldत्रुटि को सुलझाना है जो आपको मिली थी? मैंने एक ही त्रुटि में भाग लिया है, और मैं इसे सुलझाने के लिए संघर्ष कर रहा हूं।
रोब

@robintw हां मैंने किया है। मैंने उस क्षण एक नुस्खा पोस्ट किया (और मैंने इसे पाया!)। कृपया देखें
joaquin

2
अजगर 2.7.9 ने इस समस्या को हल कर दिया है। अजगर 2.7.8 अभी भी है।
fx-kirin

11

इन्हें हल करने की प्रक्रिया के दौरान और निम्नलिखित समस्याएं मुझे मिलीं, मैंने इस धागे में एक नुस्खा लिखा था । मैं इसे दूसरों के लिए उपयोगिता के मामले में यहाँ पुन: पेश कर सकता हूँ:


64-बिट जीतने के लिए मिंगव कंपाइलर के साथ अजगर 2.6.6 के साथ 64-बिट साइथन एक्सटेंशन संकलित करने के लिए कदम से कदम नुस्खा


Mingw संकलक स्थापित करें 1) 64-बिट संकलन के लिए tdm64-gcc-4.5.2.exe स्थापित करें

Python.h
2 पर पैच लागू करें ) C: \ python26 \ _ में python.h संशोधित करें, जैसा कि http://bugs.python.org/file12411/mingw-w64.patch में इंगित किया गया है।

डिस्टिलिट्स को संशोधित
करें 2013 संपादित करें: अजगर 2.7.6 और 3.3.3 -mno-cygwin की तुलना में नोट अंत में हटा दिया गया है, इसलिए चरण 3 को छोड़ दिया जा सकता है

3) सभी मापदंडों को हटा दें -mno-cygwin, Python26 \ Lib \ distutils \ cygwinccompiler.py
4 में Mingw32CCompiler वर्ग में gcc करने के लिए कॉल को हटा दें। 4) एक ही मॉड्यूल में, get_msvcr () को msvcr90 के बजाय एक खाली सूची वापस करने के लिए संशोधित करें। '] जब msc_ver ==' 1500 '।

Libpython26.a फ़ाइल का निर्माण करें (64 बिट अजगर में शामिल नहीं)
2013 संपादित करें: निम्नलिखित चरणों 5-10 को gohlke से libpython26.a डाउनलोड और इंस्टॉल करके छोड़ा जा सकता है

5) mingw-w64-bin_x86_64- mingw_20101003_sezero.zip से gendef.exe प्राप्त करें (gendef.exe tmd64 वितरण में उपलब्ध नहीं है। एक अन्य उपाय स्रोत से लिंग को संकलित करना है ...)
6) कॉपी python26.dll (C पर स्थित)। उपयोगकर्ता निर्देशिका के लिए \ windows \ system32) (C: \ Users \ myname)
7) python26.def फ़ाइल को इसके साथ बनाएँ:

gendef.exe C: \ Users \ myname \ python26.dll

8) उत्पादित python.def फ़ाइल को ले जाएँ (फ़ोल्डर में जहाँ से gendef निष्पादित किया गया था) उपयोगकर्ता निर्देशिका में
9) libpython.a के साथ बनाएँ:

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

10) निर्मित libpython26.a को C: \ Python26 \ libs में ले जाएँ

अपना .pyd एक्सटेंशन
11 प्रोड्यूस करें ) साइंटन ट्यूटोरियल ( http://docs.cython.org/src/quickstart/build.html )
12 के साथ संकलित एक परीक्षण हेल्लोफॉक्स एक्सएक्सएक्स फाइल और एक सेटअप-थ्रो फ़ाइल बनाएँ। 12) के साथ संकलित करें

python setup.py build_ext --inplace

किया हुआ!


मैंने win64 python27 पर चरण 1 किया। फिर मैंने कोशिश की और साइथन ने सफलतापूर्वक स्थापित किया। मुझे नहीं पता था कि चरण 2 में पैच के साथ क्या करना है
चारस्टैड

@ क्रिस रास्टड। दिलचस्प। लेकिन यह साइथन इंस्टॉल करने के बारे में नहीं है, बल्कि स्क्रिप्ट को संकलित करने वाले साइथॉन के बारे में है। यकीन नहीं होता अगर आपका मतलब है। वैसे भी, दो दिन पहले ld त्रुटि होने के बारे में robintw की टिप्पणी थी। इसलिए, यदि आप वास्तव में काम कर रहे हैं, तो शायद यह आपके द्वारा इंस्टॉल किए गए संस्करण पर निर्भर करता है और हो सकता है कि आपके द्वारा पहले से इंस्टॉल किए गए पुस्तकालयों में आप पहले शॉट पर जांघ करें या आप त्रुटियों के साथ फंस जाएं।
जोकिन

1
+1 यह एक उपयोगी उत्तर है। Numpy का उपयोग करने वाले एक्सटेंशन के लिए, मुझे numpy/distutilsफ़ोल्डर के अंदर विकल्प को भी हैक करना पड़ा , दोनों के लिए mingw32compiler.py
कालेब हैटिंघ

Python27 में ऐसा लगता है कि आपको cygwinccompiler.py फ़ाइल में जोड़कर MS_WIN64 को परिभाषित करना होगा। यहां देखें: stackoverflow.com/a/19867426/2136991
डेविड

@ ओपी को लिंक करने वाले प्रश्न में आपको python26 का उल्लेख है, python27 का नहीं। क्या आपने वास्तव में मेरे नुस्खे का पालन किया है और फिर भी आपके द्वारा किए गए परिवर्तन को करने की आवश्यकता है?
जोकिन


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.