Tengo un sistema Debian virtual que utilizo para desarrollar.
Hoy quería probar llvm / clang.
Después de instalar clang no puedo compilar mis viejos proyectos C (con gcc). Este es el error:
...
/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
collect2: ld returned 1 exit status
...
Desinstalé clang y todavía no funcionó.
¿Alguien tiene alguna idea de cómo puedo solucionar esto?
libc0.1-dev
.Respuestas:
Debian / Ubuntu
El problema es que probablemente solo tenga el gcc para su arquitectura actual y eso es de 64 bits. Necesita los archivos de soporte de 32 bits. Para eso, necesitas instalarlos
fuente
sudo apt-get install gcc-multilib
y solucionó mi error degfortran -m32 ...
Lo que me ayudó fue crear un vínculo simbólico:
fuente
Parece que mientras jugaba con llvm / clang, usted (o el administrador de paquetes) eliminó el paquete de desarrollo de la biblioteca C estándar previamente existente ( eglibc en Debian) o tal vez no lo tenía instalado en primer lugar, por lo que debe reinstalar , ahora que volvió a gcc.
Puede hacerlo así en Debian:
Ubuntu:
En Ubuntu, si no tiene libc-dev, ya que no puedo encontrarlo en packages.ubuntu.com, puede intentar instalar libc6-dev directamente.
O en sistemas similares a Redhat:
NB: Aunque recibió una breve respuesta en los comentarios, aquí hay una respuesta solo para que haya una registrada en caso de que alguien se encuentre con esta y pueda estar buscando una respuesta, pero no en los comentarios o el comentario no es lo suficientemente explícito para ellos. .
fuente
apk add libc-dev=0.7.1-r0
Este es un ERROR informado en Launchpad, pero hay una solución alternativa:
Ejecute esto para ver dónde se encuentran estos archivos
luego agregue esta ruta a la variable LIBRARY_PATH
fuente
Si está utilizando la versión de prueba de Debian, llamada 'wheezy', es posible que haya sido mordido por el cambio a multiarch. Más sobre la multiarca de Debian aquí: http://wiki.debian.org/Multiarch
Básicamente, lo que está sucediendo es que varias bibliotecas específicas de arquitectura se están moviendo de lugares tradicionales en el sistema de archivos a lugares específicos de nuevas arquitecturas. Por eso
/usr/bin/ld
está confundido.Encontrará crt1.o en ambos
/usr/lib64/
y/usr/lib/i386-linux-gnu/
ahora y tendrá que informar a su cadena de herramientas sobre eso. Aquí hay documentación sobre cómo hacer eso; http://wiki.debian.org/Multiarch/LibraryPathOverviewTenga en cuenta que la mera creación de un enlace simbólico solo le proporcionará una arquitectura y, básicamente, estaría deshabilitando multiarch. Si bien esto puede ser lo que desea, puede que no sea la solución óptima.
fuente
Después de leer http://wiki.debian.org/Multiarch/LibraryPathOverview que publicó jeremiah, encontré la bandera gcc que funciona sin el enlace simbólico:
Entonces, puede simplemente agregar
-B/usr/lib/x86_64-linux-gnu
a la variable CFLAGS en su Makefile.fuente
Para que RHEL 7 de 64 bits compile programas gcc 4.8 de 32 bits, deberá hacer dos cosas.
Asegúrese de que todas las herramientas de desarrollo gcc 4.8 de 32 bits estén completamente instaladas:
Compilar programas usando el indicador -m32
robado de aquí: ¿Cómo compilar aplicaciones de 32 bits en RHEL de 64 bits? - Solo tuve que hacer el paso 1.
fuente
Como se explica en el archivo crti.o que falta , es mejor usar "gcc -print-search-dirs" para averiguar toda la ruta de búsqueda. Luego cree un enlace como se explica arriba "sudo ln -s" para apuntar a la ubicación de crt1.o
fuente
Esto funcionó para mí con Ubuntu 16.04
fuente
./configure --disable-multilib
funciona para eso
fuente
Me encontré con esto en CentOs 5.4. Noté que lib64 contenía los archivos crt * .o, pero lib no. Instalé glibc-devel a través de yum que instaló los bits i386 y esto resolvió mi problema.
fuente
Incluso obtuve el mismo error de compilación cuando estaba compilando de forma cruzada i686-cm-linux-gcc.
La siguiente opción de compilación resolvió mi problema
Nota: El sysroot debe apuntar al directorio del compilador donde usr / include disponible
En mi caso, la cadena de herramientas está instalada en el directorio / opt / toolchain / i686-cm-linux-gcc y usr / include también está disponible en el mismo directorio
fuente
Lo resolví de la siguiente manera:
1) intente localizar archivos ctr1.o y ctri.o usando
find -name ctr1.o
Tengo lo siguiente en mi computadora:
$/usr/lib/i386-linux/gnu
2) Agregue esa ruta a
PATH
(tambiénLIBRARY_PATH
) la variable de entorno (para ver cuál es el nombre: escriba elenv
comando en la Terminal):fuente
Tuve el mismo problema hoy, lo resolví instalando los paquetes recomendados: libc6-dev-mipsel-cross libc6-dev-mipsel-cross, libc-dev-mipsel-cross
Esto funcionó:
fuente
En mi caso, el error crti.o se debió a la configuración de la ruta de ejecución de Matlab. Por ejemplo, no puede realizar un archivo si no ha establecido anteriormente la ruta de su directorio de ejecución. Para hacer esto: Archivo> setPath, agregue su directorio y guarde.
fuente
utilizar
gcc -B lib_path_containing_crt?.o
fuente
En mi caso
Ubuntu 16.04
no tengo nadacrti.o
:Así que instalo el paquete desarrollador libc 6 -dev:
fuente