Question Problèmes de compilation: impossible de trouver crt1.o


J'ai un système virtuel Debian que je développe pour

Aujourd'hui, je voulais essayer llvm / clang.

Après l'installation de clang, je ne peux pas compiler mes anciens projets c (avec gcc). C'est l'erreur:

...
/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
...

J'ai désinstallé clang et ça n'a toujours pas fonctionné.

Est-ce que quelqu'un a une idée de la façon dont je peux résoudre ce problème?


85
2018-06-13 11:35


origine


Réponses:


Debian / Ubuntu

Le problème est que vous n'avez probablement que le gcc pour votre architecture actuelle et cela est 64 bits. Vous avez besoin des fichiers de support 32 bits. Pour cela, vous devez les installer

sudo apt install gcc-multilib

58
2018-04-15 13:44



Ce qui m'a aidé, c'est de créer un lien symbolique:

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

57
2018-01-25 14:08



Il semblerait que pendant que vous jouiez avec llvm / clang you (ou le gestionnaire de paquets) supprimiez le package standard de développement de la bibliothèque C existant (eglibc sur Debian) ou peut-être que vous ne l'aviez pas installé en premier lieu, vous devez donc le réinstaller, maintenant que vous êtes revenu à gcc.

Vous pouvez le faire comme ça sur Debian:

aptitude show libc-dev

Ubuntu:

apt-get install libc-dev

Sur Ubuntu, si vous n'avez pas libc-dev, puisque je ne le trouve pas sur packages.ubuntu.com, vous pouvez essayer d'installer directement libc6-dev.

Ou sur les systèmes de type RedHat:

yum installe glibc-devel

NB: Même si vous avez brièvement répondu dans les commentaires, voici une réponse pour qu’il y en ait une dans le cas où une personne rencontre celle-ci et pourrait chercher une réponse, mais pas dans les commentaires ou si le commentaire n’est pas assez explicite pour eux. .


29
2017-07-11 15:42



C'est un PUNAISE signalé dans le tableau de bord, mais il existe une solution de contournement:

Exécutez ceci pour voir où se trouvent ces fichiers

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

puis ajoutez ce chemin à la variable LIBRARY_PATH

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

25
2018-05-17 09:13



Si vous utilisez la version de test de Debian, appelée «Wheezy», vous avez peut-être été mordu par le passage à multiarch. En savoir plus sur le multiarchie de Debian ici: http://wiki.debian.org/Multiarch

Fondamentalement, ce qui se passe est que différentes bibliothèques spécifiques à l'architecture sont déplacées des lieux traditionnels du système de fichiers vers de nouveaux endroits spécifiques à l'architecture. C'est pourquoi /usr/bin/ld est confus.

Vous trouverez crt1.o dans les deux /usr/lib64/ et /usr/lib/i386-linux-gnu/ maintenant et vous aurez besoin de dire à votre chaîne d'outils à ce sujet. Voici quelques documents sur la façon de le faire. http://wiki.debian.org/Multiarch/LibraryPathOverview

Notez que la simple création d'un lien symbolique ne vous donnera que un l'architecture et vous serait essentiellement désactiver multiarch. Bien que cela puisse être ce que vous voulez, il ne s'agit peut-être pas de la solution optimale.


17
2018-06-19 12:56



Après avoir lu le http://wiki.debian.org/Multiarch/LibraryPathOverview que jeremiah a posté, j'ai trouvé le drapeau gcc qui fonctionne sans le lien symbolique:

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

Donc, vous pouvez simplement ajouter -B/usr/lib/x86_64-linux-gnu à la variable CFLAGS dans votre Makefile.


13
2017-09-12 09:49



Pour que RHEL 7 64 bits compile les programmes gcc 4.8 32 bits, vous devez faire deux choses.

  1. Assurez-vous que tous les outils de développement gcc 4.8 32 bits sont complètement installés:

    sudo yum install glibc-devel.i686 libgcc.i686 libstdc++-devel.i686 ncurses-devel.i686
    
  2. Compiler des programmes en utilisant l'indicateur -m32

    gcc pgm.c -m32 -o pgm
    

volé d'ici: Comment compiler des applications 32 bits sur RHEL 64 bits? - Je devais faire que l'étape 1.


7
2017-08-15 22:39



Comme expliqué dans fichier crti.o manquant , il vaut mieux utiliser "gcc -print-search-dirs" pour trouver tout le chemin de recherche. Ensuite, créez un lien expliquant ci-dessus "sudo ln -s" pour indiquer l'emplacement de crt1.o


5
2018-01-22 05:48



Ran dans ceci sur CentOs 5.4. Remarqué que lib64 contenait les fichiers crt * .o, mais pas la lib. Installé glibc-devel par yum qui a installé les bits i386 et ceci a résolu mon problème.


1
2018-03-20 06:49