Comstackndo problemas: no se puede encontrar crt1.o

Tengo un sistema Debian virtual que utilizo para desarrollar.

Hoy quería probar llvm / clang.

Después de instalar clang, no puedo comstackr mis viejos c-projects (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?

Debian / Ubuntu

El problema es que probablemente solo tengas el gcc para tu architecture actual y eso sea de 64 bits. Necesitas los archivos de soporte de 32 bits. Para eso, necesitas instalarlos

 sudo apt install gcc-multilib 

Lo que me ayudó fue crear un enlace simbólico:

 sudo ln -s /usr/lib/x86_64-linux-gnu /usr/lib64 

Parece que mientras jugabas con llvm / clang, tú (o el administrador de paquetes) eliminaste el paquete de desarrollo de bibliotecas C estándar previamente existente ( eglibc en Debian) o tal vez no lo has instalado en primer lugar, por lo que debes volver a instalar esto, ahora que volviste a gcc.

Puedes hacerlo así en Debian:

 aptitude show libc-dev 

Ubuntu:

 apt-get install libc-dev 

En Ubuntu, si no tiene libc-dev, ya que no puedo encontrarlo en packages.ubuntu.com, puede intentar instalar libc6-dev directamente.

O en Redhat como sistemas:

yum instalar glibc-devel

NB: Aunque se le respondió brevemente en los comentarios, aquí hay una respuesta 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. .

Este es un error reportado en la plataforma de lanzamiento, pero hay una solución alternativa:

Ejecute esto para ver dónde se encuentran estos archivos

 $ find /usr/ -name crti* /usr/lib/x86_64-linux-gnu/crti.o 

luego agrega esta ruta a la variable LIBRARY_PATH

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

Si está usando la versión de Debian’s Testing, llamada ‘wheezy’, es posible que haya sido mordido por el movimiento a multiarch. Más sobre la multiarquía de Debian aquí: http://wiki.debian.org/Multiarch

Básicamente, lo que está ocurriendo es que varias bibliotecas específicas de la architecture se trasladan de lugares tradicionales en el sistema de archivos a lugares específicos de la nueva architecture. Esta es la razón /usr/bin/ld cual /usr/bin/ld está confundido.

Encontrarás crt1.o en /usr/lib64/ y /usr/lib/i386-linux-gnu/ now y tendrás que contarle esto a tu cadena de herramientas. Aquí hay alguna documentación sobre cómo hacer eso; http://wiki.debian.org/Multiarch/LibraryPathOverview

Tenga en cuenta que el mero hecho de crear un enlace simbólico solo le dará una architecture y usted estaría básicamente deshabilitando Multiarch. Si bien esto puede ser lo que quieres, puede que no sea la solución óptima.

Después de leer la http://wiki.debian.org/Multiarch/LibraryPathOverview que publicó jeremiah, encontré la bandera gcc que funciona sin el enlace simbólico:

 gcc -B/usr/lib/x86_64-linux-gnu hello.c 

Entonces, solo puede agregar -B/usr/lib/x86_64-linux-gnu a la variable CFLAGS en su Makefile.

Para obtener RHEL 7 de 64 bits para comstackr progtwigs gcc 4.8 de 32 bits, deberá hacer dos cosas.

  1. Asegúrese de que todas las herramientas de desarrollo de gcc 4.8 de 32 bits estén completamente instaladas:

     sudo yum install glibc-devel.i686 libgcc.i686 libstdc++-devel.i686 ncurses-devel.i686 
  2. Comstack progtwigs usando la bandera -m32

     gcc pgm.c -m32 -o pgm 

robado desde aquí: ¿Cómo comstackr aplicaciones de 32 bits en RHEL de 64 bits? – Solo tuve que hacer el paso 1.

Como se explica en el archivo crti.o que falta , es mejor usar “gcc -print-search-dirs” para descubrir toda la ruta de búsqueda. Luego crea un enlace como se explica arriba “sudo ln -s” para apuntar a la ubicación de crt1.o

Se metió en esto en CentOs 5.4. Notó que lib64 contenía los archivos crt * .o, pero lib no. Instalado glibc-devel a través de yum que instaló los bits i386 y esto resolvió mi problema.

./configure –disable-multilib

trabaja para eso

Incluso obtuve el mismo error de comstackción cuando estaba comstackndo i686-cm-linux-gcc.

La opción de comstackción a continuación resolvió mi problema

 $ i686-cm-linux-gcc ac --sysroot=/opt/toolchain/i686-cm-linux-gcc 

Nota: El sysroot debe apuntar al directorio del comstackdor 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

Esto funcionó para mí con Ubuntu 16.04

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

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ó:

 sudo apt-get install libc6-dev-mipsel-cross 

En mi caso, el error crti.o estaba relacionado con la configuración de la ruta de ejecución de Matlab. Por ejemplo, no puede ejecutar un archivo si no ha configurado previamente la ruta de su directorio de ejecución. Para hacer esto: Archivo> setPath, agregue su directorio y guárdelo.

use gcc -B lib_path_containing_crt? .o

Lo resolví de la siguiente manera:

1) intenta ubicar los archivos ctr1.o y ctri.o utilizando find -name ctr1.o

Obtuve lo siguiente en mi computadora: $/usr/lib/i386-linux/gnu

2) Agregue esa ruta a la variable de entorno PATH (también LIBRARY_PATH ) (para ver cuál es el nombre: escriba env en el Terminal):

 $PATH=/usr/lib/i386-linux/gnu:$PATH $export PATH 

En mi caso Ubuntu 16.04 no tengo crti.o en absoluto:

 $ find /usr/ -name crti* 

Entonces instalo el paquete developer libc 6 -dev:

 sudo apt-get install libc6-dev