कॉन्फ़िगर करें: त्रुटि: C कंपाइलर निष्पादक नहीं बना सकता है


15

मैं rvm का उपयोग कर स्थापित करने की कोशिश कर रहा था \curl -L https://get.rvm.io | bash -s stable --ruby --autolibs=enable --auto-dotfiles। यह तब तक ठीक काम किया जब तक मुझे एक कॉन्फ़िगर त्रुटि नहीं मिली:

Error running './configure --prefix=/home/nishant/.rvm/rubies/ruby-2.0.0-p247 --disable-install-doc --enable-shared',
please read /home/nishant/.rvm/log/1379591052_ruby-2.0.0-p247/configure.log
There has been an error while running configure. Halting the installation.

निम्नलिखित लॉग फ़ाइल की सामग्री इस प्रकार है:

[2013-09-19 17:15:58] ./configure
current path: /home/nishant/.rvm/src/ruby-2.0.0-p247
command(4): ./configure --prefix=/home/nishant/.rvm/rubies/ruby-2.0.0-p247 --disable-install-doc --enable-shared
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
checking for gcc... gcc
checking whether the C compiler works... no
configure: error: in `/home/nishant/.rvm/src/ruby-2.0.0-p247':
configure: error: C compiler cannot create executables
See `config.log' for more details

मैंने तब एक "हैलो वर्ल्ड" सी प्रोग्राम की कोशिश की और संकलन पर निम्नलिखित त्रुटि मिली:

nishant@nishant-Inspiron-1545:~$ gcc -g -o hello hello.c 
/usr/local/bin/ld: this linker was not configured to use sysroots
collect2: error: ld returned 1 exit status

मुझे यकीन नहीं है कि यह त्रुटि क्यों दी गई है। मुझे मंच पर इसका संतोषजनक उत्तर नहीं मिला। क्या कोई मदद कर सकता है। धन्यवाद


1
मुझे यह त्रुटि तब हुई जब मैंने CPPFLAGS के लिए './configure' स्क्रिप्ट चलाते समय गलती से CXXFLAGS निर्दिष्ट कर दिया था। तो त्रुटि संदेश सटीक त्रुटि की व्याख्या नहीं करता है।
राजरविवर्मा

जवाबों:


12

ऐसा लगता है कि आपके पास ldअपनी /usr/local/binनिर्देशिका में संभवतः GNU लिंकर का एक गैर-मानक संस्करण है (संभवतः स्रोत से इंस्टॉल किया गया है), और आपके PATH पर्यावरण चर को ऐसे सेट किया गया है कि सिस्टम उस संस्करण को 'सिस्टम' संस्करण से पहले पाता है (जो कि होना चाहिए /usr/bin/ld) । यदि आप बिल्ड टूल के मानक सिस्टम संस्करणों का उपयोग करके निर्माण करना चाहते हैं , तो आपको अपने PATH पर्यावरण चर को समायोजित करने की आवश्यकता होगी ताकि यह /usr/binआगे की खोज करे/usr/local/bin

यदि आप अपने PATH चर को स्थायी रूप से ठीक करना चाहते हैं, तो आपको यह पता लगाना होगा कि आपने इसे मूल रूप से कहाँ सेट किया है - शायद आपकी ~ / .bashrc फ़ाइल में, लेकिन अन्य स्थान संभव हैं। वैकल्पिक रूप से, अगर आपको इस निर्माण के लिए अस्थायी सुधार की आवश्यकता है, तो आप कोशिश कर सकते हैं

export PATH="/usr/bin:$PATH"

निष्पादित करने से पहले टर्मिनल में ./configure

हालाँकि कभी-कभी अच्छे कारण होते हैं कि आप (या आपका सिस्टम एडमिन) क्यों चाहता है कि आप टूल्स के संस्करणों का उपयोग करें /usr/local- यदि ऐसा है, तो आपको यह पता लगाना होगा कि ldवहाँ स्पष्ट रूप से बाकी बिल्ड चेन के साथ संगत क्यों नहीं है और ठीक करें यह - यदि यह एक काम या स्कूल प्रणाली है तो अपने सिस्टम प्रशासक या आईटी विभाग से संपर्क करें।


9
आम तौर पर /usr/local/binआगे की है /usr/binमें PATHअच्छे कारण के लिए: एक कार्यक्रम स्थानीय रूप से स्थापित वितरण से संस्करण पूर्वता लेता है, तो होने का कोई मतलब नहीं है। समस्या को हल करने के लिए अच्छा काम है, लेकिन सुझाए गए प्रस्ताव को पैट को बदलने के लिए नहीं बल्कि उस टूटे हुए को हटाने या ठीक करने के लिए है /usr/local/bin/ld
गिल्स एसओ- बुराई को रोकें '

@steeldriver: अगर यह वहां नहीं होता तो ~ / .Bashrc क्या मैं बस "PATH =" / usr / bin: $ PATH "" लाइन को कॉपी-पेस्ट कर सकता था। या यह अन्य कार्यक्रमों के लिए एक समस्या पैदा करेगा?
नाका

@Gilles मैंने आपकी टिप्पणी को प्रतिबिंबित करने के लिए अपना उत्तर संपादित किया है @naka मैं इसके खिलाफ सलाह देता हूं, यह लंबे समय में अधिक भ्रम पैदा करेगा - आपको गाइल्स की टिप्पणी पर ध्यान देना चाहिए और पता लगाना चाहिए कि आपके व्यवस्थापक ने PATH का उपयोग करने के लिए सेट क्यों किया है संस्करण/usr/local
स्टीलड्राइवर

3
मुझे वही त्रुटि मिली ... यह मेरे लिए काम नहीं करता था ... which ldकेवल रिटर्न देता है /usr/bin/ld...।
isomorphismes

9

ऊपर दिए गए जटिल कारणों के विपरीत, मेरे मामले में, यह बस g++स्थापित नहीं होने का मामला था। अजीब तरह से, त्रुटि संदेश ओपी द्वारा वर्णित के रूप में ही था

configure: error: C compiler cannot create executables

वैसे भी, मैंने इसे जी ++ स्थापित करके हल किया:

sudo apt-get install g++

0

सिस्टम को अपडेट करने की कोशिश करें, ld और कंपाइलर ( gcc ) प्रदान करने वाले पैकेजों को पुनः स्थापित करें । भागो prelink -au && depmod -a। फिर रिबूट करें।

/etc/systemctlजहाँ भी आपका डिस्ट्रोस इसे सेट करता है, वहां आपको प्रीलिंक को निष्क्रिय या फिर से कॉन्फ़िगर करना पड़ सकता है ।

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