problème de lien clang
J'ai juste essayé la dernière llvm et clang tronc versions. Ils ont compilé sans un seul avertissement hors de la boîte, mais je vais avoir de la difficulté à relier un exemple hello world. Mon Code est
#include <stdio.h>
int main(){
printf("hello\n");
}
Si je le compiler à l'aide de
clang test.c
J'obtiens l'erreur suivante
/usr/bin/ld: crt1.o: No such file: No such file or directory
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Aide -v montre que la gnu ld est invoqué comme
"/usr/bin/ld" --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o a.out crt1.o crti.o crtbegin.o -L -L/../../.. /tmp/cc-0XJTsG.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed crtend.o crtn.o
Mais j'ai la crt1.o fichier de l'objet!
$ locate crt1.o
/usr/lib/Mcrt1.o
/usr/lib/Scrt1.o
/usr/lib/crt1.o
/usr/lib/gcrt1.o
Ce qui fonctionne aussi est
clang -c test.c
gcc test.o
et bien sûr
gcc test.c
Ce que j'ai encore essayé:
$ clang -Xlinker "-L /usr/lib" test.c
/usr/bin/ld: crt1.o: No such file: No such file or directory
clang: error: linker command failed with exit code 1 (use -v to see invocation)
$ clang -Xlinker "-L /usr/lib" test.c -v
"/usr/bin/ld" --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o a.out crt1.o crti.o crtbegin.o -L -L/../../.. -L /usr/lib /tmp/cc-YsI9ES.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed crtend.o
J'ai aussi essayé de copier le crt1.o fichier dans le répertoire courant. Qui semblait fonctionner. Eh bien, il ne se compile pas, parce que, après que l'irtc.o manquait.
Ma distribution Ubuntu.
Eh bien, je ne sais pas vraiment ce à essayer ensuite. Je ne vois pas comment je pourrais corriger clang, ni puis-je avoir une idée sur la façon d'injecter, le chemin d'accès nécessaire dans la ld invocation. Des idées?
source d'informationauteur Ben04
Vous devez vous connecter pour publier un commentaire.
Semble être clang version qui ne permet pas de détecter de l'hôte linux de la version et de la version de gcc..
Ce code dans clang qui doit ajouter un chemin d'accès à la crt*:
llvm›tools›clang›lib›Driver›Tools.cpp
et la GetFilePath vais essayer de rechercher demandé fichiers dans
getFilePaths()
la liste à jour des Outils (fichierclang/lib/Driver/ToolChains.cpp
). Si il ne peut pas trouver un fichier, il sera de retour le Nom inchangé.S'il vous plaît, donnez-moi votre version de ubuntu (
uname -a
cat /etc/lsb-release
), de sortie exacte (numéro de révision svn) de clang et llvm, etgcc -v
sortieCette horrible HACK "fixe" compilation/liaison avec clang 3.0(r142716) sur Ubuntu 11.10 (x86)
Dans le fichier inclus à partir de /usr/include/stdio.h:28:
/usr/include/fonctionnalités.h:323:10: fatal error: 'bits/predefs.h " fichier non trouvé
/usr/bin/ld: ne peut trouver crt1.o: Aucun fichier ou répertoire
/usr/bin/ld: ne peut trouver de l'irtc.o: Aucun fichier ou répertoire de
Sur les plus récentes (3.5) la libération de ce genre de problème a surgi de nouveau pour ceux qui ne l'accumulation à l'aide de la
--with-gcc-toolchain
option de configuration sur un système avec un pré-gcc 4.7 libstdc++ bibliothèque installée.Vous le verrez dans deux saveurs:
... ainsi que de ne pas être sur le point de trouver les différents crt fichiers.
Dans les deux cas, le suivant vous permet de contourner le problème jusqu'à ce qu'il est résolu:
exécuter:
Dans mon exemple de sortie est:
Exécuter les opérations suivantes en tant que root pour utiliser le cible de créer de répertoire manquant comme un lien: