आप पुराने gcc संस्करण कैसे बनाते हैं? Crti.o के बारे में त्रुटियां नहीं पाई जा रही हैं


10

मैं Ubuntu 11.10 पर एक पुराने जीसीसी (विशेष रूप से, 4.5.2) कैसे बना सकता हूं और "/ usr / bin / ld:" के बारे में त्रुटियों से बच सकता हूं: crti.o नहीं ढूँढ सकता: ऐसी कोई फ़ाइल या निर्देशिका नहीं "?

मैंने खुदाई का एक सा काम किया है और कई समान वस्तुओं को पाया है, लेकिन कोई भी वास्तव में मेरे मुद्दे को हल नहीं करता है:

  • मैंने अपने सभी पैकेज सत्यापित किए हैं (libc6-dev और इसी तरह) इस प्रश्न के अनुसार फिर से स्थापित किए गए हैं
  • मैंने सत्यापित किया है कि crti.o / usr / lib32 और / usr / lib / x86_64-linux-gnu में मौजूद है, और यह कि मेरे ld.so.conf को उन निर्देशिकाओं में देखने के लिए कॉन्फ़िगर किया गया है
  • मैंने सत्यापित किया है कि LIBRARY_PATH = / usr / lib / x86_64-linux-gnu कार्यों के साथ अपना मेक इनवोकेशन प्रस्तुत करने, लेकिन इससे बचना चाहते हैं (यह मेकफाइल्स में एक विचलन बिंदु बन जाता है)
  • मैंने विभिन्न चीजों की कोशिश की है - साथ-बिल्ड-सिसरोट, लेकिन बिना किसी सफलता के साथ (पढ़ें: शायद मुझे बस सेट करने के लिए सही ध्वज नहीं पता है)
  • स्ट्रेस के साथ चलने पर ( इस उत्तर के अनुसार ), मैं crti.o को नंगे संदर्भ देख सकता हूं:

    13240 खुला ("crti.o", O_RDONLY) = -1 ENOENT (ऐसी कोई फ़ाइल या निर्देशिका नहीं)

धन्यवाद!

जवाबों:


7

मुझे भी यही समस्या थी। मेरे लिए समस्या हल /usr/libs/crt?.o करने से प्रतीकात्मक संबंध बनाना /usr/lib/x86_64-linux-gnu/crt?.o


यह काम करता है, हाँ। मैं एक समाधान के लिए उम्मीद कर रहा था जो अंतर्निहित फ़ाइल संरचनाओं के साथ मिलिंग के बजाय gcc स्थापना को ट्विक करने की तर्ज पर अधिक था, हालांकि ...
मैट

मैं जोड़ना चाहता था कि मेरे मामले में, मैंने glibc और GCC को फिर से जोड़ दिया, लेकिन मैं एक पुराने स्लैकवेयर-जीसीसी संस्करण से छुटकारा पाना भूल गया, जो / usr / bin / था। जब मैंने बाद को हटा दिया, तो मैं कुछ चीजों को फिर से संकलित कर सकता था (जैसे कि जीसीसी फिर से)।
शेवी

10

यहां तक ​​कि जीसीसी के बहुत नए संस्करण उस संदेश के साथ विफल हो जाते हैं। इसका कारण यह है कि नए डेबियन / उबंटू रिलीज़ मल्टीचार्च (यानी एक फाइल-सिस्टम में कई मशीनों के लिए बायनेरी स्थापित करने) का समर्थन करता है, इसलिए पुस्तकालयों को मानक स्थानों से दूर ले जाया गया है।

यहां इसे ठीक करने के लिए जीसीसी पैच हैं (अभी तक अनुमोदित अंतिम संस्करण नहीं हैं, लेकिन उबंटू के लिए सही है), और वे शायद बहुत प्रयास के बिना पुराने जीसीसी पर लागू होते हैं, शायद। मुझे लगता है कि आपको GCC को --enable-multarch , या कुछ और से कॉन्फ़िगर करने की आवश्यकता है।

इस बीच, सॉफ्ट लिंक बनाना एक अच्छा फ़िक्सअप है:

cd /usr/lib
ln -s x86_64-linux-gnu/crt*.o .

(32-बिट इंस्टॉलेशन पर फ़ोल्डर का नाम अलग होगा)।

उम्मीद है की वो मदद करदे।


इसके बारे में इस बिंदु के लिए धन्यवाद कि यह मल्टीकार है। मैं "क्यों" पर संकल्प के लिए उम्मीद कर रहा था, इसने काम करना बंद कर दिया।
मैट

2

मैंने इस समस्या को हल किया है जो आपके लिए उपयोगी हो सकती है।

सबसे पहले, जीसीसी के साथ निर्माण करें LIBRARY_PATH=/usr/lib/x86_64-linux-gnu, ताकि बिल्ड बूटस्ट्रैप प्रक्रिया को पता चले कि कहां से crt?.oआरंभिक फाइलें मिलें।

फिर, जहां वे आपके पूरे सिस्टम को प्रभावित करते हैं crt?.o, /usr/libवहां सिम्बलिंक बनाने के बजाय , आप उन तीन फाइलों को ${prefix}/lib/gcc/...डायरेक्टरी में उसी डायरेक्टरी में सिमिलर कर सकते हैं, ${prefix}/binजो gccएक्जीक्यूटेबल इनस्टॉल है। यह वास्तव में स्टार्ट फाइल्स के लिए इसके सर्च पथ में सबसे ऊपर है, इसलिए। यह उन्हें मिल जाएगा - लेकिन वे कुछ और प्रभावित नहीं करते हैं।

मेरे मामले में, उन्हें डालने की विशिष्ट निर्देशिका थी lib/gcc/x86_64-unknown-linux-gnu/4.3.2/; आप सही पता लगा सकते हैं क्योंकि इसमें पहले से ही अन्य फाइलें हैं crtbegin.o


1

मैंने Ubuntu सटीक x86_64 पर GCC 4.1.2 बनाया। जैसा कि आपने किया, मैंने 32bit c रनटाइम, grep-ped / 32 / निम्नानुसार अंतिम कमांड "xgcc" के स्ट्रेस पर एक नज़र डाली। सी रनटाइम मेरा / usr / lib32 में है जो libc6-dev-i386 पैकेज द्वारा प्रदान किया गया है।

fgrep /32/ strace-output.txt | grep /usr/lib | head -1
access("/usr/lib/gcc/x86_64-unknown-linux-gnu/4.1.2/32/crti.o", R_OK) = -1 ENOENT (No such file or directory)

इसलिए, मैंने crt बनाया है।। निर्देशिका में सिग्लिंक्स के लिए xgcc को देखा।

sudo mkdir -p /usr/lib/gcc/x86_64-unknown-linux-gnu/4.1.2/32
cd /usr/lib/gcc/x86_64-unknown-linux-gnu/4.1.2/32
sudo ln -s /usr/lib32/crt1.o 
sudo ln -s /usr/lib32/crtn.o 
sudo ln -s /usr/lib32/crti.o 

मैंने इसके साथ सफलतापूर्वक जीसीसी 4.1.2 का निर्माण किया।

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