J'ai un système Debian virtuel que j'utilise pour développer.
Aujourd'hui, je voulais essayer llvm / clang.
Après avoir installé clang, je ne peux pas compiler mes anciens projets c (avec gcc). Voici 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 a-t-il une idée de la façon dont je peux résoudre ce problème?
libc0.1-dev
.Réponses:
Debian / Ubuntu
Le problème est que vous n'avez probablement que le gcc pour votre architecture actuelle et c'est 64 bits. Vous avez besoin des fichiers de support 32 bits. Pour cela, vous devez les installer
la source
sudo apt-get install gcc-multilib
et a corrigé mon erreur degfortran -m32 ...
Ce qui m'a aidé, c'est de créer un lien symbolique:
la source
Il semble que pendant que vous jouiez avec llvm / clang, vous (ou le gestionnaire de paquets) avez supprimé le package de développement de bibliothèque C standard existant précédemment ( eglibc sur Debian) ou peut-être ne l'avez-vous pas installé en premier lieu, vous devez donc le réinstaller it, maintenant que vous êtes revenu à gcc.
Vous pouvez le faire comme ceci sur Debian:
Ubuntu:
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 des systèmes comme Redhat:
NB: Bien que l'on vous ait répondu brièvement dans les commentaires, voici une réponse juste pour qu'il y en ait une au cas où quelqu'un rencontre celle-ci et pourrait chercher une réponse, mais pas dans les commentaires ou le commentaire n'est pas assez explicite pour eux .
la source
apk add libc-dev=0.7.1-r0
Ceci est un BUG signalé dans le tableau de bord, mais il existe une solution de contournement:
Exécutez ceci pour voir où se trouvent ces fichiers
puis ajoutez ce chemin à la variable LIBRARY_PATH
la source
Si vous utilisez la version Testing de Debian, appelée «wheezy», vous avez peut-être été mordu par le passage à multiarch. En savoir plus sur la multiarchitecture de Debian ici: http://wiki.debian.org/Multiarch
Fondamentalement, ce qui se passe, c'est que diverses bibliothèques spécifiques à l'architecture sont déplacées des emplacements traditionnels du système de fichiers vers de nouveaux emplacements 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 devrez en parler à votre chaîne d'outils. Voici une documentation sur la façon de procéder;http://wiki.debian.org/Multiarch/LibraryPathOverviewNotez que créer simplement un lien symbolique ne vous donnera qu'une seule architecture et que vous désactiveriez essentiellement multiarch. Bien que ce soit ce que vous voulez, ce n'est peut-être pas la solution optimale.
la source
Après avoir lu le http://wiki.debian.org/Multiarch/LibraryPathOverview que jeremiah a publié, j'ai trouvé le drapeau gcc qui fonctionne sans le lien symbolique:
Ainsi, vous pouvez simplement ajouter
-B/usr/lib/x86_64-linux-gnu
à la variable CFLAGS dans votre Makefile.la source
Pour que RHEL 7 64 bits compile les programmes gcc 4.8 32 bits, vous devez faire deux choses.
Assurez-vous que tous les outils de développement 32 bits gcc 4.8 sont complètement installés:
Compilez des programmes en utilisant l'indicateur -m32
volé d'ici: Comment compiler des applications 32 bits sur RHEL 64 bits? - Je n'avais qu'à faire l'étape 1.
la source
Comme expliqué dans le fichier crti.o manquant , il est préférable d'utiliser "gcc -print-search-dirs" pour trouver tous les chemins de recherche. Ensuite, créez un lien comme expliqué ci-dessus "sudo ln -s" pour pointer vers l'emplacement de crt1.o
la source
Cela a fonctionné pour moi avec Ubuntu 16.04
la source
./configure --disable-multilib
fonctionne pour ça
la source
Ran dans cela sur CentOs 5.4. Vous avez remarqué que lib64 contenait les fichiers crt * .o, mais pas lib. Installé glibc-devel via yum qui a installé les bits i386 et cela a résolu mon problème.
la source
Même j'ai eu la même erreur de compilation lors de la compilation croisée de i686-cm-linux-gcc.
L'option de compilation ci-dessous a résolu mon problème
Remarque: Le sysroot doit pointer vers le répertoire du compilateur où usr / include est disponible
Dans mon cas, la chaîne d'outils est installée dans le répertoire / opt / toolchain / i686-cm-linux-gcc et usr / include est également disponible dans le même répertoire
la source
Je l'ai résolu comme suit:
1) essayez de localiser les fichiers ctr1.o et ctri.o en utilisant
find -name ctr1.o
J'ai les éléments suivants sur mon ordinateur:
$/usr/lib/i386-linux/gnu
2) Ajoutez ce chemin à
PATH
(égalementLIBRARY_PATH
) la variable d'environnement (afin de voir quelle est laenv
commande name: type dans le terminal):la source
J'ai eu le même problème aujourd'hui, je l'ai résolu en installant les packages recommandés: libc6-dev-mipsel-cross libc6-dev-mipsel-cross, libc-dev-mipsel-cross
Cela a fonctionné:
la source
Dans mon cas, l'erreur crti.o était due à la configuration du chemin d'exécution de Matlab. Par exemple, vous ne pouvez pas exécuter un fichier si vous n'avez pas défini le chemin de votre répertoire d'exécution auparavant. Pour ce faire: File> setPath, ajoutez votre répertoire et enregistrez.
la source
utilisation
gcc -B lib_path_containing_crt?.o
la source
Dans mon cas,
Ubuntu 16.04
je n'ai pascrti.o
du tout:J'installe donc le package du développeur libc 6 -dev:
la source