crti.o नहीं ढूँढ सकते: ऐसी कोई फ़ाइल या निर्देशिका नहीं है


19

जब मैं gcc 4.1.2 बनाना चाहता हूं ( मेरे लिए ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-4.1.2/gcc-4.1.2.tar.bz2 ) ubuntu 12.04 (x86_64)। वर्तमान सक्रिय gcc 4.6.2 है। मैंने किया:

./configure

फिर

make

हालाँकि मुझे यह त्रुटि मिलती है

/usr/bin/ld: cannot find crti.o: No such file or directory
collect2: ld returned 1 exit status

वेब पर खोज करने पर ऐसा लगता है कि स्थान के साथ कोई समस्या है crti। ये फाइलें सिस्टम पर उपलब्ध हैं

# find /usr/ -name crti*
/usr/lib32/crti.o
/usr/lib/x86_64-linux-gnu/crti.o
/usr/lib/debug/usr/lib/x86_64-linux-gnu/crti.o

इसके अलावा libc6 डेवेल पैकेज स्थापित है

# dpkg -l | grep libc6
ii  libc6                                  2.15-0ubuntu10.3                          Embedded GNU C Library: Shared libraries
ii  libc6-dbg                              2.15-0ubuntu10.3                        Embedded GNU C Library: detached debugging symbols
ii  libc6-dev                              2.15-0ubuntu10.3                        Embedded GNU C Library: Development Libraries and Header Files
ii  libc6-dev-i386                         2.15-0ubuntu10.3                        Embedded GNU C Library: 32-bit development libraries for AMD64
ii  libc6-i386                             2.15-0ubuntu10.3                        Embedded GNU C Library: 32-bit shared libraries for AMD64
ii  libc6-pic                              2.15-0ubuntu10.3                        Embedded GNU C Library: PIC archive library

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

अपडेट करें:

इनको जोड़ने के बाद

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH 

वह समस्या हल हो गई। हालाँकि अब मुझे मिलता है

/usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libc.a when searching for -lc
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/x86_64-linux-gnu/crti.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/x86_64-linux-   gnu/crtn.o' is incompatible with i386 output
collect2: ld returned 1 exit status

मैं अन्य त्रुटियों हो रही है, के बारे में makeinfoनहीं किया जा रहा वर्तमान है, जो है अपने सिस्टम पर। इन चरणों के साथ अपनी त्रुटि प्राप्त नहीं कर सकते।
gertvdijk

जवाबों:


13

यह लॉन्चपैड में बताया गया एक BUG है , बाइट में वर्कअराउंड है:

32 बिट्स प्लेटफॉर्म में 64 बिट्स प्रोग्राम का संकलन:

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH

32 बिट्स देशी के लिए:

LIBRARY_PATH=/usr/lib32:$LIBRARY_PATH
export LIBRARY_PATH

लाइब्रेरी के नए स्थान को खोजने के लिए आपकी .bashrc फ़ाइल (या कंसोल से चलाया गया) जीसीसी के लिए पर्याप्त है।

धन्यवाद। Iain Buclaw (ibuclaw) को सही दिशा में इंगित करने के लिए।

12.10 32 बिट्स

hhlp@hhlp:~$ sudo find /usr/ -name crti*
/usr/lib/i386-linux-gnu/crti.o
hhlp@hhlp:~$ 

LIBRARY_PATH=/usr/lib/i386-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH

12.10 64 बिट्स

hhlp@hhlp:~$ sudo find /usr/ -name crti*
/usr/lib/x86_64-linux-gnu/crti.o
hhlp@hhlp:~$ 

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH

वह समस्या हल हो गई। हालाँकि नई त्रुटि मुझे मिलती है। कृपया मूल पोस्ट
महमूद

2
धन्यवाद, लेकिन यह दूसरी समस्या का हल नहीं था। मैंने पाया कि मैं करना था ./configure --disable-multilibऔर के अनुसार खरोंच से पुनर्निर्माण gcc.gnu.org/ml/gcc-help/2009-05/msg00238.html आपकी मदद के लिए धन्यवाद
महमूद

Ubuntu 16.04 और मेरे निर्माण के साथ काम नहीं करता है।
निकल्स

मैं एक ही मुद्दे का सामना कर रहा हूं, लेकिन make installअंतिम चरण के रूप में चल रहा हूं । मैंने LIBRARY_PATH सेट किया, लेकिन कोई फायदा नहीं हुआ !! किसी भी मदद की सराहना की
faizan

1
उपयोग करने के बाद मुझे समस्या थी कि "वर्तमान निर्देशिका LIBRARY_PATH में नहीं होनी चाहिए, जो कि पहले से खाली LIBRARY_PATH के कारण है। इसलिए उपयोग करें export LIBRARY_PATH="/usr/lib/x86_64-linux-gnu${LIBRARY_PATH+:$LIBRARY_PATH}"या (यदि आप जानते हैं कि यह खाली है)export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
Flamefire

1

मेरे मामले Ubuntu 16.04में मेरे पास crti.oबिल्कुल नहीं है:

$ find /usr/ -name crti*

इसलिए मैं डेवलपर पैकेज स्थापित करता हूं:

sudo apt-get install libc6-dev

0

अपस्ट्रीम स्रोतों से x86-64 पर जीसीसी 4.8 का निर्माण आप 32- और 64-बिट पुस्तकालयों (जब तक कि बहु-लिबास अक्षम नहीं है) का निर्माण करने की आवश्यकता की समस्या में चलते हैं। उस मामले में आप दोनों रास्तों जोड़ने की जरूरत है /usr/lib/x86_64-linux-gnuऔर /usr/lib32


डिफ़ॉल्ट रूप से हाँ। लेकिन आप बिल्ड को केवल 64 बिट के विकल्प --with-multilib-list = m64 for/configure के साथ प्रतिबंधित कर सकते हैं। मेरे लिए यह तब काम आया जब मैंने जीसीसी 4.8.5 का निर्माण किया। मैंने इसका उल्लेख अपने उत्तर (भाग 3) में stackoverflow.com/a/55703805/4807875 पर भी किया है
अलेक्जेंडर समोयलोव

0

मैं भी (एक 4.6.3 मशीन पर 3.4.6) मेरी Ubuntu मशीन पर जीसीसी के एक पुराने संस्करण का निर्माण कर रहा हूँ
मैंने कोशिश की @ महमूद के --disable-multilib समाधान है, लेकिन फिर पैकेज मैं उपयोग करने के लिए जीसीसी 3.4.6 भी लग रहा था की जरूरत के रूप में अच्छी तरह से 32 बिट पुस्तकालय की जरूरत है।

इस प्रकार मैंने LIBRARY_PATH में 64 बिट और 32 बिट लाइब्रेरी दोनों को जोड़ा

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/usr/lib32:$LIBRARY_PATH 
export LIBRARY_PATH 

ओह और मैं Ubuntu 12.04 64 बिट्स पर हूं


1
पुराने gcc / g ++ के साथ काम करने के लिए, आपको उबंटू को भूलना होगा क्योंकि उबंटू के नए संस्करण पर, आप समस्या को पूरी तरह से ठीक नहीं कर सकते हैं और दूसरी ओर एक पुराना उबंटू अब समर्थित नहीं है। आपको रीहैडेट आधारित सिस्टम का उपयोग करना होगा। सेंटोस 6.3 ठीक है
महमूद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.