2012-01-14 9 views
24

में संकलित नहीं किया गया है मैंने अपने x86 32-बिट लिनक्स सिस्टम पर जीसीसी 4.7 बनाया है। 64-बिट मोडजीसीसी: क्षमा करें, अनुपूरक: 64-बिट मोड

में संकलित नहीं, जबकि मेरी Linux वितरण द्वारा डिफ़ॉल्ट रूप से प्रदान की संकलक पार कर सकते हैं: मैं करने का प्रयास करते -m64 झंडा मैं

माफ करना, लागू नहीं किया गया साथ पार संकलन -64 के साथ संकलित करें।

मुझे जीसीसी में 64 बिट मोड को सक्षम करने के लिए ./configure को पास करने के लिए क्या करना है?

$ /usr/local/bin/g++ -v Using built-in specs. 
COLLECT_GCC=/usr/local/bin/g++ 
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/i686-pc-linux-gnu/4.7.0/lto-wrapper 
Target: i686-pc-linux-gnu 
Configured with: ./configure --enable-multiarch --with-cloog=/usr/local/ --with-mpfr=/usr/local/ --with-ppl=/usr/local/ --verbose --enable-languages=c,c++ 
Thread model: posix gcc version 4.7.0 20120113 (experimental) (GCC) 

संपादित करें:

--enable-multilib और --enable-लक्ष्य = i686-पीसी-linux-gnu, x86_64-पीसी- ये विकल्प मैं जीसीसी 4.7 का निर्माण करने के लिए इस्तेमाल कर रहे हैं linux-gnu

स्थिति को न बदलें। संकलक अभी भी संकलित नहीं किए गए 65 बिट मोड की शिकायत करता है:

$ g ++ -v अंतर्निहित चश्मे का उपयोग करना। COLLECT_GCC = g ++ COLLECT_LTO_WRAPPER =/usr/local/libexec/gcc/i686-pc-linux-gnu/4.7.0/lto-wrapper लक्ष्य: i686-pc-linux-gnu के साथ कॉन्फ़िगर किया गया: ./configure - सक्षम -multiarch --with-cloog =/usr/local/--with-mpfr =/usr/local/--with-ppl =/usr/local/--verbose --enable-languages ​​= c, C++ --enable -multilib --enable-targets = i686-pc-linux-gnu, x86_64-pc-linux-gnu थ्रेड मॉडल: पॉज़िक्स जीसीसी संस्करण 4.7.0 20120113 (प्रयोगात्मक) (जीसीसी)

$ g ++ -m64 c.cpp c.cpp: 1: 0: माफ करना, लागू नहीं किया गया: 64-बिट मोड नहीं

+0

'--enable-multiarch' डेबियन (या व्युत्पन्न) का सुझाव देता है, और जैसा कि मुझे याद है, एफएसएफ का जीसीसी वास्तव में डेबियन के बहुआयामी प्रणालियों के साथ अच्छी तरह से काम नहीं करता है। आपको एफएसएफ जीसीसी स्नैपशॉट्स में डेबियन के पैच को लागू करने की आवश्यकता हो सकती है। – hvd

+0

बेशक यह इस तरह काम नहीं करेगा। मल्टीलिब में * पिछड़ा * संगतता है, और * आगे * नहीं है। 32-बिट मशीन पर 64-बिट कोड संकलित करने के लिए आपको न्यूनतम एसडीके बनाना होगा: binutils + libc [musl, uclibc, glibc, ...] + gcc। – 0andriy

उत्तर

9

में संकलित आप दोनों binutils और जीसीसी के साथ विन्यस्त की आवश्यकता होगी:

--enable-multilib 

और शायद:

--enable-targets=i686-pc-linux-gnu,x86_64-pc-linux-gnu 

multilib (-m64 और/या -m32 विकल्प) का समर्थन करने के। परिणामी बाइनरी को जोड़ने और चलाने में सक्षम होने के लिए आपको ग्लिब जैसे सामानों के दो संस्करणों की भी आवश्यकता होगी।

+0

यह --enable-multilib और --enable-targets = i686-pc-linux-gnu, x86_64-pc-linux-gnu: $ g ++ -v अंतर्निहित चश्मे का उपयोग करके काम नहीं करता है। COLLECT_GCC = जी ++ COLLECT_LTO_WRAPPER =/usr/स्थानीय/libexec/जीसीसी/i686-पीसी-linux-जीएनयू/4.7.0/LTO-आवरण लक्ष्य: i686-पीसी-linux-gnu साथ कॉन्फ़िगर: कॉन्फ़िगर - सक्षम-बहुआयामी - साथ-क्लूग =/usr/local/--with-mpfr =/usr/local/--with-ppl =/usr/local/--verbose --enable-languages ​​= c, C++ - सक्षम-multilib --enable-targets = i686-pc-linux-gnu, x86_64-pc-linux-gnu थ्रेड मॉडल: पॉज़िक्स जीसीसी संस्करण 4.7.0 20120113 (प्रयोगात्मक) (जीसीसी) – Martin

+2

क्या आपके पास binutils कॉन्फ़िगर किया गया है एक ही विकल्प? – rubenvb

+0

यह गलत है, आप * आगे * संगतता प्राप्त नहीं कर सकते हैं। – 0andriy

19

इसका आमतौर पर मतलब है कि आप गलत (पुराने) कंपाइलर का उपयोग कर रहे हैं।

नए कंपाइलर -m32 और -m64 दोनों का समर्थन करते हैं। आपको से पहले Rtools में किसी भी पुराने कंपाइलर से पहले नए कंपेलरों (जीसीसी में, आरटीओएल के मिनीजीडब्ल्यू उपनिर्देशिका) में पैथ सेट करना होगा।

64 बिट संस्करण के लिए अपने कंपाइलर के बाइनरी lib पथ को अपडेट करने का प्रयास करें। Lib संसाधनों जैसे अन्य संसाधनों को भी तदनुसार बदलना चाहिए।

+1

मुझे समझ में नहीं आता कि किसी ने इस जवाब को नकारात्मक वोट क्यों दिया। यह मेरे मामले में वास्तविक सही जवाब था। – Anoyz

+0

"आपके कंपाइलर का बाइनरी lib पथ" क्या है? –

1

बस इस मुद्दे को हल किया गया। पर्यावरण चर में, किसी भी पुराने C++ पैकेज में प्रविष्टियों को हटा दें।

मेरे मामले में, मैंने विंडोज 64-बिट पर एनाकोंडा में काम किया। एनाकोंडा में, मैंने 'कोंडा इंस्टॉल mingw libpython' प्रदर्शन किया। मिंगव सी ++ कंपाइलर के लिए है। लेकिन मैंने पहले सी ++ संकलन के लिए साइगविन के मिंगव को स्थापित किया था जिसे अद्यतन नहीं किया गया था। संघर्ष के लिए यही कारण है। मैंने इन सी ++ पैकेजों के अनुरूप पर्यावरण चर (पीएटीएच) को हटाकर इस समस्या को हल किया।
मैंने लगभग सभी मंचों का प्रयास किया है, यह समाधान काम करता है।

किसी को भी मदद की ज़रूरत है तो कृपया मुझे बताएं। :)

संबंधित मुद्दे