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
makeinfo
nie występuje, co jest w moim systemie. Nie można dostać się do błędu w tych krokach.Odpowiedzi:
To jest BŁĄD zgłoszony w starterze, byt obejście:
kompilacja programu 64-bitowego na platformie 32-bitowej:
dla 32 bitów natywnych:
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
12,10 64 bitów
źródło
./configure --disable-multilib
i odbudować od podstaw, zgodnie z gcc.gnu.org/ml/gcc-help/2009-05/msg00238.html Dzięki za pomocmake install
jako ostatni krok. Ustawiłem LIBRARY_PATH, ale bezskutecznie !! Jakakolwiek pomoc docenionaexport 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
W moim przypadku
Ubuntu 16.04
nie mam wcalecrti.o
:Więc instaluję pakiet programisty:
źródło
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-gnu
i/usr/lib32
.źródło
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
No i jestem na Ubuntu 12.04 64bits
źródło