no puede encontrar crti.o: no existe tal archivo o directorio

19

Cuando quiero hacer gcc 4.1.2 ( ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-4.1.2/gcc-4.1.2.tar.bz2 ) en mi ubuntu 12.04 (x86_64). El gcc activo actual es 4.6.2. Yo hice:

./configure

luego

make

Sin embargo me sale este error

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

Al buscar en la web, parece que hay un problema con la ubicación de crti. Estos archivos están disponibles en el 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

También está instalado el paquete de desarrollo 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

¿Cómo puedo arreglar eso?

ACTUALIZAR:

Después de agregar estos

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

Ese problema está resuelto. Sin embargo ahora tengo

/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
fuente
Recibo otros errores, sobre makeinfono estar presente, que está en mi sistema. No puedo llegar a su error con estos pasos.
gertvdijk

Respuestas:

13

Este es un ERROR reportado en el launchpad, pero hay una solución alternativa:

compilando un programa de 64 bits en una plataforma de 32 bits:

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

para 32 bits nativos:

LIBRARY_PATH=/usr/lib32:$LIBRARY_PATH
export LIBRARY_PATH

Eso en su archivo .bashrc (o ejecutado desde una consola) es suficiente para que GCC encuentre la nueva ubicación de la biblioteca.

Gracias. a Iain Buclaw (ibuclaw) para señalar en la dirección correcta.

12.10 32 bits

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 bits

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
fuente
Ese problema está resuelto. Sin embargo nuevo error me sale. Por favor vea la publicación original
mahmood
2
Gracias pero esa no fue la solución al segundo problema. Descubrí que tenía que hacer ./configure --disable-multiliby reconstruir desde cero de acuerdo con gcc.gnu.org/ml/gcc-help/2009-05/msg00238.html Gracias por su ayuda
mahmood
No funciona con Ubuntu 16.04 y mi compilación.
Niklas
Me enfrento al mismo problema, pero mientras corro make installcomo paso final. ¡Configuré LIBRARY_PATH pero fue en vano! Cualquier ayuda apreciada
faizan
1
Después de usar eso tuve el problema "El directorio actual no debería estar en LIBRARY_PATH` causado por un LIBRARY_PATH previamente vacío. Por lo tanto, use export LIBRARY_PATH="/usr/lib/x86_64-linux-gnu${LIBRARY_PATH+:$LIBRARY_PATH}"o (si sabe que está vacío)export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
Flamefire
1

En mi caso, Ubuntu 16.04no tengo nada crti.o:

$ find /usr/ -name crti*

Entonces instalo el paquete de desarrollador:

sudo apt-get install libc6-dev
Eugen Konkov
fuente
0

Al crear GCC 4.8 en x86-64 a partir de fuentes ascendentes, se encuentra con el problema de necesitar construir bibliotecas de 32 y 64 bits (a menos que la opción multi-lib esté desactivada). En ese caso, debe agregar ambas rutas /usr/lib/x86_64-linux-gnuy /usr/lib32.

John Vreeland
fuente
Por defecto sí. Pero puede restringir la compilación a solo 64 bits con la opción --with-multilib-list = m64 para ./configure. Funcionó para mí cuando construí GCC 4.8.5. También lo mencioné en mi respuesta (parte 3) en stackoverflow.com/a/55703805/4807875 .
Alexander Samoylov
0

También estoy construyendo una versión anterior de gcc en mi máquina Ubuntu (3.4.6 en una máquina 4.6.3)
Probé la solución @disable-multilib de @ mahmood, pero luego el paquete que necesitaba para usar gcc 3.4.6 también parecía para necesitar la biblioteca de 32 bits también.

Por lo tanto, agregué las bibliotecas de 64 bits y 32 bits a la LIBRARY_PATH

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

Ah, y estoy en Ubuntu 12.04 64bits

Heartinpiece
fuente
1
Para trabajar con gcc / g ++ anterior, debe olvidarse de Ubuntu porque en la versión más nueva de Ubuntu, no puede solucionar completamente el problema y, por otro lado, ya no se admite un Ubuntu anterior. Tienes que usar sistemas basados ​​en rehdat. Centos 6.3 está bien
mahmood