r16 r13 para ndk 11c gcc clang ld

gcc - r13 - Compilando problemas: no se puede encontrar crt1.o



ndk r16 (17)

Debian / Ubuntu

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

sudo apt install gcc-multilib

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 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?


./configure --disable-multilib

trabaja para eso


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


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.


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


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.


Este es un BUG 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


Esto funcionó para mí con Ubuntu 16.04

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


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

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

$ i686-cm-linux-gcc a.c --sysroot=/opt/toolchain/i686-cm-linux-gcc

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


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

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


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


Para obtener RHEL 7 de 64 bits para compilar programas 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. Compila programas usando la bandera -m32

    gcc pgm.c -m32 -o pgm

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


Parece que mientras jugabas con llvm / clang, tú (o el administrador de paquetes) eglibc 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. .


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.


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 arquitectura se trasladan de lugares tradicionales en el sistema de archivos a lugares específicos de la nueva arquitectura. 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 arquitectura y usted estaría básicamente deshabilitando Multiarch. Si bien esto puede ser lo que quieres, puede que no sea la solución óptima.


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


use gcc -B lib_path_containing_crt? .o