178 votes

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

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

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 cela ne fonctionnait toujours pas.

Quelqu'un at-il une idée de comment je peux résoudre ce problème?

168voto

Dmitry Pavlenko Points 3907

Pour moi

 aptitude install gcc-multilib
 

résolu un problème similaire sur Debian.

65voto

kchaja Points 539

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

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

55voto

Shinnok Points 2858

Il semble que si vous jouiez avec llvm/clang vous(ou le gestionnaire de paquets) retirées précédemment existantes bibliothèque standard C paquet de développement(eglibc sur Debian) ou peut-être vous ne l'avez pas installé à la première place, donc vous devez le réinstaller, maintenant que vous revenue à gcc.

Vous pouvez le faire comme ceci sur Debian:

aptitude show libc-dev

Ubuntu:

apt-get install libc-dev

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

Ou sur Redhat:

yum install glibc-devel

NB: Même si vous avez été brièvement répondu dans les commentaires, voici une réponse juste, donc il est sur l'enregistrement dans le cas où quelqu'un rencontre ce un et peut-être à la recherche d'une réponse, mais pas dans les commentaires ou le commentaire n'est pas assez explicite pour eux.

18voto

alexm Points 331

Après avoir lu le http://wiki.debian.org/Multiarch/LibraryPathOverview publié par jeremiah, 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.

17voto

jeremiah Points 647

Si vous utilisez Debian, la version d'Essai, appelé "wheezy", alors vous avez été mordu par le passage à multiarch. Plus sur Debian multiarch ici: http://wiki.debian.org/Multiarch

Fondamentalement, ce qui se passe est divers spécifiques à l'architecture des bibliothèques sont déplacés des lieux traditionnels dans le système de fichiers de la nouvelle architecture des lieux spécifiques. 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 de la documentation sur la façon de le faire; http://wiki.debian.org/Multiarch/LibraryPathOverview

Notez que le simple fait de créer un lien symbolique ne fera que vous donner un architecture en et vous serait essentiellement la désactivation de multiarch. Même si cela peut être ce que vous voulez, il peut ne pas être la solution optimale.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X