impossibile trovare crti.o: nessun file o directory


19

Quando voglio creare gcc 4.1.2 ( ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-4.1.2/gcc-4.1.2.tar.bz2 ) sul mio ubuntu 12.04 (x86_64). L'attuale gcc attivo è 4.6.2. L'ho fatto:

./configure

poi

make

Comunque ottengo questo errore

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

Cercando sul web sembra che ci sia un problema con la posizione di crti. Questi file sono disponibili sul sistema

# 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

Inoltre è installato il pacchetto di sviluppo 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

Come posso ripararlo?

AGGIORNARE:

Dopo aver aggiunto questi

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

Questo problema è stato risolto. Comunque adesso capisco

/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

Ricevo altri errori, circa il makeinfonon essere presente, che è sul mio sistema. Impossibile ottenere l'errore con questi passaggi.
gertvdijk,

Risposte:


13

Questo è un BUG riportato nel launchpad, ma c'è una soluzione alternativa:

compilazione del programma a 64 bit nella piattaforma a 32 bit:

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

per 32 bit nativi:

LIBRARY_PATH=/usr/lib32:$LIBRARY_PATH
export LIBRARY_PATH

Quello nel tuo file .bashrc (o eseguito da una console) è sufficiente per GCC per trovare la nuova posizione della libreria.

grazie. a Iain Buclaw (ibuclaw) per indicare nella giusta direzione.

12.10 32 bit

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

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

Questo problema è stato risolto. Comunque ho ricevuto un nuovo errore. Si prega di consultare il post originale
mahmood,

2
Grazie ma non era la soluzione al secondo problema. Ho scoperto che dovevo fare ./configure --disable-multilibe ricostruire da zero secondo gcc.gnu.org/ml/gcc-help/2009-05/msg00238.html Grazie per l'aiuto
mahmood

Non funziona con Ubuntu 16.04 e la mia build.
Niklas

Devo affrontare lo stesso problema, ma mentre corro make installcome passaggio finale. Ho impostato LIBRARY_PATH ma inutilmente !! Qualsiasi aiuto apprezzato
faizan,

1
Dopo aver usato quello ho avuto il problema "La directory corrente non dovrebbe essere in LIBRARY_PATH` causata da un LIBRARY_PATH precedentemente vuoto. Quindi usa export LIBRARY_PATH="/usr/lib/x86_64-linux-gnu${LIBRARY_PATH+:$LIBRARY_PATH}"o (se sai che è vuoto)export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
Flamefire

1

Nel mio caso Ubuntu 16.04il non ho crti.oaffatto:

$ find /usr/ -name crti*

Quindi installo il pacchetto per sviluppatori:

sudo apt-get install libc6-dev

0

Costruendo GCC 4.8 su x86-64 da fonti upstream si incontra il problema della necessità di creare librerie a 32 e 64 bit (a meno che il multi-lib sia disabilitato). In tal caso è necessario aggiungere entrambi i percorsi /usr/lib/x86_64-linux-gnue /usr/lib32.


Di default si. Ma puoi limitare la build a soli 64 bit con l'opzione --with-multilib-list = m64 per ./configure. Ha funzionato per me quando ho creato GCC 4.8.5. L'ho menzionato anche nella mia risposta (parte 3) su stackoverflow.com/a/55703805/4807875 .
Alexander Samoylov,

0

Sto anche costruendo una versione precedente di gcc sul mio computer Ubuntu (3.4.6 su un computer 4.6.3)
Ho provato la soluzione --disable-multilib di @ mahmood, ma poi sembrava anche il pacchetto di cui avevo bisogno per usare gcc 3.4.6 per avere bisogno anche della libreria a 32 bit.

Quindi ho aggiunto entrambe le librerie a 64 e 32 bit a LIBRARY_PATH

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

Oh, sono su Ubuntu 12.04 a 64 bit


1
Per lavorare con gcc / g ++ più vecchi, devi dimenticare Ubuntu perché nella versione più recente di Ubuntu, non puoi risolvere completamente il problema e un vecchio Ubuntu invece non è più supportato. Devi usare sistemi basati su rehdat. Centos 6.3 è ok
mahmood,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.