नाचोस स्रोत कोड संकलित करते समय "ग्नू / स्टब्स-32.h: ऐसी कोई फ़ाइल या निर्देशिका" नहीं


170

मैं अपने लैपटॉप पर नाचोस स्थापित करने की कोशिश कर रहा हूं और मेरे पास लैपटॉप पर उबंटू 11.04 है।

कोड सी में है और इसलिए इसे बनाने के लिए मुझे लगता है कि मुझे क्रॉस कंपाइलर की आवश्यकता होगी। यहीं पर मेरी समस्या है। मैंने कमांड का उपयोग करते हुए MIPS क्रॉस कंपाइलर के स्रोत कोड को डाउनलोड किया

  wget http://mll.csie.ntu.edu.tw/course/os_f08/assignment/mips-decstation.linux-xgcc.gz

और मैंने इसका उपयोग न कर दिया

tar zxvf mips-decstation.linux-xgcc.gz      

यह ठीक है, लेकिन जब मैं nachos os के सोर्स कोड को बनाने की कोशिश करता हूं, तो मेक का उपयोग करके, मुझे यह त्रुटि मिलती है -

/usr/include/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h: No such file or directory compilation terminated. make: *** [bitmap.o] Error 1

मैं यहां दिए गए निर्देशों का पालन करने की कोशिश कर रहा हूं - http://mll.csie.ntu.edu.tw/course/os_f08/217.htm और जब भी मैं उपयोग करने की कोशिश करता हूं, तब तक सब कुछ ठीक रहता है।


1
आपके सुझावों के लिए धन्यवाद, कार्यक्रम अब संकलित करना शुरू करता है, लेकिन मुझे यह त्रुटि मिलती है _ हाय, अब मेरे पास यह त्रुटि है - / usr / bin / ld: असंगत / usr / lib / x86_64-linux-gum / gcc / x86_64- को लंघन linux-gnu / 4.5.2 / libstdc ++। जब -lstdc ++ / usr / bin / ld की खोज करते हैं: -lstdc ++ कलेक्ट नहीं कर पाता 2: ld ने 1 निकास स्थिति बना ली: *** [nosos] त्रुटि 1 कैसे ठीक करने के बारे में कोई विचार यह ? इसके बारे में मुझे क्या करना चाहिए ?
आशीष अग्रवाल

जवाबों:


352

आप 32 बिट लिबास देव पैकेज को याद कर रहे हैं:

पर उबंटू यह libc6-देव-i386 कहा जाता है - ऐसा sudo apt-get install libc6-dev-i386। Ubuntu 12.04 के लिए अतिरिक्त निर्देशों के लिए नीचे देखें।

पर रेड हैट distros, पैकेज का नाम है glibc-devel.i686(डेविड गार्डनर के टिप्पणी के लिए धन्यवाद)।

पर CentOS 5.8 , पैकेज का नाम है glibc-devel.i386(JimKleck की टिप्पणी के लिए धन्यवाद)।

CentOS 6/7 पर , पैकेज का नाम है glibc-devel.i686

पर SLES यह glibc-devel-32 बिट कहा जाता है - ऐसा zypper in glibc-devel-32bit

पर Gentoo यह कहा जाता है sys-libs/glibc- ऐसा emerge -1a sys-libs/gcc [ स्रोत ] (ध्यान दें: एक का उपयोग कर सकते equeryयह सही है की पुष्टि के लिए, कर equery belongs belongs /usr/include/gnu/stubs-32.h)

पर ArchLinux , पैकेज का नाम है lib32-glibc- ऐसा pacman -S lib32-glibc


क्या आप Ubuntu 12.04 का उपयोग कर रहे हैं ? नहीं है एक ज्ञात समस्या यह है कि एक गैर मानक स्थान में डालता है फ़ाइलें । आपको भी करना होगा:

export LIBRARY_PATH=/usr/lib/$(gcc -print-multiarch)
export C_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)
export CPLUS_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)

कहीं बनने से पहले (अपने .bashrc में कहें)।


यदि आप C ++ कोड भी संकलित कर रहे हैं, तो आपको 32 बिट stdc ++ लाइब्रेरी की भी आवश्यकता होगी। यदि आप यह चेतावनी देखते हैं:

.... / usr / bin / ld: -lstdc ++ नहीं ढूँढ सकता ...

पर उबंटू आप करने की आवश्यकता होगी sudo apt-get install g++-multilib

पर 5 CentOS आप करने की आवश्यकता होगीyum install libstdc++-devel.i386

पर CentOS 6 तुम क्या करने की आवश्यकता होगीyum install libstdc++-devel.i686

कृपया अन्य प्रणालियों के लिए संकुल में संपादित करने के लिए स्वतंत्र महसूस करें।


2
हो सकता है कि मुझे वह पैकेज न मिला हो, इसका कारण यह है कि मेरा लैपटॉप 32 बिट का है ... हालांकि मुझे ऐसा नहीं मिला libc-dev-amd64। मेरी गलती।
कीथ लेयने

1
हाँ, मैं कहूँगा कि वह शायद 64 बिट मशीन पर है, यही वजह है कि फाइल गायब है। मेरे 64 बिट मशीन पर, stubs.h (जो उसके पास है) libc6-dev में है, जबकि stubs-32.h (जो वह नहीं करता है) libc6-dev-i386 में है। उपयुक्त फ़ाइल के बारे में अच्छी टिप - मुझे इसके बारे में नहीं पता था :)
टिमोथी जोन्स

8
आप उस लाइब्रेरी के 32 बिट संस्करण को एकsudo apt-get install g++-multilib
टिमोथी जोन्स

1
रेड हैट-आधारित डिस्ट्रोस पर इसका सामना करने वालों के लिए, पैकेज glibc-devel.i686 है (मैंने अभी किया और यह उत्तर मुझे सही दिशा में इंगित करने के लिए मददगार था :)
डेविड गार्डनर

2
उबंटू 12.04 पर एक ज्ञात समस्या है जो इस फ़ाइल को स्थापना के बाद एक गैर-मानक निर्देशिका में रखती है। इस समाधान ने मेरे लिए अंतिम gcc.gnu.org/ml/gcc/2012-02/msg00314.html पर काम किया ।
एरिक चेन

55

से जीएनयू UPC वेबसाइट :

कंपाइलर बिल्ड घातक त्रुटि के साथ विफल रहता है: gnu / stubs-32.h: ऐसी कोई फ़ाइल या निर्देशिका नहीं

यह त्रुटि संदेश 64 बिट सिस्टम पर दिखाई देता है जहां GCC / UPC मल्टीबिल सुविधा सक्षम है, और यह इंगित करता है कि 32 बिट संस्करण libc स्थापित नहीं है। इस समस्या को ठीक करने के दो तरीके हैं:

  • 32 बिट संस्करण glibc (जैसे glibc-devel.i686 को Fedora, CentOS, ..) पर स्थापित करें
  • संकलक विन्यास कमांड पर "-disable-multilib" स्विच की आपूर्ति करके 'मल्टीबिल' का निर्माण करें

8
विशेष रूप से उपयोगी उत्तर के लिए धन्यवाद: --disable-multilibहिस्सा
नेक्रोमन्ट

3
@ djhaskin987, gccupc.org स्रोत नहीं है, gcc.gnu.org है
जोनाथन

मैंने x64
सेंटो

1
आप एक ऑटोकॉन्ड आधारित प्रणाली के साथ यह कैसे करते हैं? मैंने पासिंग करने की कोशिश की है - डिसिबल-मल्टीबिल, लेकिन यह कुछ भी नहीं बदलता है। मल्टीबिल पैकेज को स्थापित करने के लिए मेरे पास रूट एक्सेस नहीं है।
user632657

9

ए करने की कोशिश करो sudo apt-get install libc6-dev

apt-file मुझे बताता है कि विचाराधीन फ़ाइल उस पैकेज की है।


आपके उत्तर के लिए धन्यवाद, इसने बहुत मदद की: डी
आशीष अग्रवाल

यह मल्टीकोर मशीन पर पर्याप्त नहीं है क्योंकि आपको यह त्रुटि तब भी मिलेगी जब आपके पास libc6-dev का नवीनतम संस्करण स्थापित हो।
जेरेमिया


2

मुझे फेडोरा 18 बॉक्स में निम्नलिखित त्रुटि हो रही थी:


1. orrr/include/gnu/stubs.h:7:27: घातक त्रुटि: gnu / stubs-32.h: ऐसी कोई फ़ाइल या निर्देशिका संकलन समाप्त नहीं हुई है।

मैंने glibc.i686 और glibc-devel.i686 को स्थापित किया, फिर निम्नलिखित त्रुटि के साथ संकलन विफल हो गया:

2.। Usr / bin / ld: असंगत /usr/lib/gcc/x86_64-redhat-linux/4.7.2/libgcc_s.so को लंघन करते समय -lgcc_s / usr / bin / ld: को खोजने पर -lgcc_s collect2: error नहीं मिल सकता है : आईडी वापस 1 निकास स्थिति

उपाय:

मैंने संकलन मुद्दे से छुटकारा पाने के लिए (yum install) glibc.i686 glibc-devel.i386 और libgcc.i686 स्थापित किया।

अब 32 बिट (-32) के लिए संकलन ठीक काम करता है।


1

हम्म अच्छी तरह से मैं ubuntu 12.04 पर हूं और मुझे यह वही त्रुटि मिली जब gcc 4.7.2 को संकलित करने का प्रयास किया गया

मैंने libc6-dev-i386पैकेज स्थापित करने की कोशिश की और निम्नलिखित मिला:

Package libc6-dev-i386 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'libc6-dev-i386' has no installation candidate

मैंने बैश में सही पर्यावरण चर भी निर्धारित किए हैं:

export LIBRARY_PATH=/usr/lib/$(gcc -print-multiarch)
export C_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)
export CPLUS_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)

हालाँकि, मैं अभी भी त्रुटि प्राप्त कर रहा था, तो मैंने बस उस जगह पर कॉपी stubs-32.hकिया जहाँ gcc को एक त्वरित अंतर करने के बाद इसे खोजने की उम्मीद थी:

vic@ubuntu:/usr/include/i386-linux-gnu/gnu$ diff ../../gnu ./
Only in ./: stubs-32.h
Only in ../../gnu: stubs-64.h
vic@ubuntu:/usr/include/i386-linux-gnu/gnu$ sudo cp stubs-32.h ../../gnu/
[sudo] password for vic: 
vic@ubuntu:/usr/include/i386-linux-gnu/gnu$ diff ../../gnu ./
Only in ../../gnu: stubs-64.h
vic@ubuntu:/usr/include/i386-linux-gnu/gnu$

यह अब संकलन कर रहा है, आइए देखें कि क्या यह अधिक शिकायत करता है ...


अजीब। यह पैकेज निश्चित रूप से 12.04 में उपलब्ध है (सटीक) संकुल
टिमोथी जोन्स

0

FWIW, यह एक त्रुटि (या कम से कम भविष्य के दर्द का एक संभावित स्रोत) की तरह बदबू आ रही है / usr / से फ़ाइलों का उपयोग कर जब क्रॉस-संकलन।


1
मुझे लगता है कि वह टूलकिन का निर्माण करने की कोशिश कर रहा है, न कि उन लोगों के साथ क्रॉस-कंपाइल।
कीथ लेयने

0

gnu/stubs-32.hप्रोग्रामों में निर्देशित नहीं है। यह एक बैक-एंड टाइप हेडर फ़ाइल है gnu/stubs.h, जैसे gnu/stubs-64.h। आप multilibदोनों को जोड़ने के लिए पैकेज स्थापित कर सकते हैं।


0

# sudo apt-get install g ++ - मल्टीलीब

64-बिट मशीनों (डेबियन / उबंटू) पर इस त्रुटि को ठीक करना चाहिए।


0

यदि आप अजगर के साथ मैक-ओएसएक्स टर्मिनल में इस समस्या का सामना कर रहे हैं, तो उन पैकेजों के संस्करणों को अपडेट करने का प्रयास करें जिन्हें आप उपयोग कर रहे हैं। तो, अजगर में अपनी फ़ाइलों पर जाएं और जहां आपने पैकेज निर्दिष्ट किए हैं, उन्हें इंटरनेट पर उपलब्ध नवीनतम संस्करणों में अपडेट करें।


0

डेबियन / उबंटू उपयोग पर:

sudo apt-get install g++-multilib libc6-dev-i386

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