nie można znaleźć crti.o: nie ma takiego pliku ani katalogu

19

Kiedy chcę utworzyć gcc 4.1.2 ( ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-4.1.2/gcc-4.1.2.tar.bz2 ) na moim ubuntu 12.04 (x86_64). Obecnie aktywny gcc to 4.6.2. Zrobiłem:

./configure

następnie

make

Jednak dostaję ten błąd

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

Wyszukiwanie w sieci wydaje się, że istnieje problem z lokalizacją crti. Te pliki są dostępne w systemie

# 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

Zainstalowany jest także pakiet devel 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

Jak mogę to naprawić?

AKTUALIZACJA:

Po dodaniu tych

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

Ten problem został rozwiązany. Jednak teraz rozumiem

/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
mahmood
źródło
Dostaję inne błędy, o makeinfonie występuje, co jest w moim systemie. Nie można dostać się do błędu w tych krokach.
gertvdijk

Odpowiedzi:

13

To jest BŁĄD zgłoszony w starterze, byt obejście:

kompilacja programu 64-bitowego na platformie 32-bitowej:

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

dla 32 bitów natywnych:

LIBRARY_PATH=/usr/lib32:$LIBRARY_PATH
export LIBRARY_PATH

To w pliku .bashrc (lub uruchomionym z konsoli) wystarczy, aby GCC znalazł nową lokalizację biblioteki.

dzięki. Iainowi Buclawowi (ibuclaw), aby wskazać właściwy kierunek.

12,10 32 bity

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 bitów

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
hhlp
źródło
Ten problem został rozwiązany. Jednak pojawia się nowy błąd. Zobacz oryginalny post
mahmood
2
Dzięki, ale to nie było rozwiązanie drugiego problemu. Odkryłem, że muszę zrobić ./configure --disable-multilibi odbudować od podstaw, zgodnie z gcc.gnu.org/ml/gcc-help/2009-05/msg00238.html Dzięki za pomoc
mahmood
Nie działa z Ubuntu 16.04 i moją wersją.
Niklas
Stoję w obliczu tego samego problemu, ale biegnę make installjako ostatni krok. Ustawiłem LIBRARY_PATH, ale bezskutecznie !! Jakakolwiek pomoc doceniona
faizan
1
Po skorzystaniu z tego miałem problem "Bieżący katalog nie powinien znajdować się w LIBRARY_PATH` spowodowany wcześniej pustą LIBRARY_PATH. Stąd użyj export LIBRARY_PATH="/usr/lib/x86_64-linux-gnu${LIBRARY_PATH+:$LIBRARY_PATH}"lub (jeśli wiesz, że jest pusty)export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
Flamefire
1

W moim przypadku Ubuntu 16.04nie mam wcale crti.o:

$ find /usr/ -name crti*

Więc instaluję pakiet programisty:

sudo apt-get install libc6-dev
Eugen Konkov
źródło
0

Budując GCC 4.8 na x86-64 ze źródeł upstream, masz problem z budowaniem bibliotek 32- i 64-bitowych (chyba że multi-lib jest wyłączone). W takim przypadku musisz dodać obie ścieżki /usr/lib/x86_64-linux-gnui /usr/lib32.

John Vreeland
źródło
Domyślnie tak. Możesz jednak ograniczyć kompilację do wersji 64-bitowej z opcją --with-multilib-list = m64 dla ./configure. To działało dla mnie, kiedy zbudowałem GCC 4.8.5. Wspomniałem o tym również w mojej odpowiedzi (część 3) na stackoverflow.com/a/55703805/4807875 .
Alexander Samoylov
0

Buduję też starszą wersję gcc na moim komputerze Ubuntu (3.4.6 na komputerze 4.6.3)
Wypróbowałem @demable-multilib rozwiązanie @ mahmood, ale wtedy pakiet, którego potrzebowałem, by użyć gcc 3.4.6, również wydawał się potrzebować również biblioteki 32-bitowej.

Dlatego dodałem biblioteki 64-bitowe i 32-bitowe do LIBRARY_PATH

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

No i jestem na Ubuntu 12.04 64bits

Heartinpiece
źródło
1
Aby pracować ze starszymi wersjami gcc / g ++, musisz zapomnieć o Ubuntu, ponieważ w nowszej wersji Ubuntu nie można w pełni naprawić problemu, a starsze Ubuntu z drugiej strony nie jest już obsługiwane. Musisz użyć systemów opartych na ponownym przetwarzaniu. Centos 6.3 jest w porządku
mahmood