La compilation de problèmes: impossible de trouver crt1.o
J'ai un virtuel système Debian que j'utilise pour développer.
Aujourd'hui, j'ai voulu essayer de llvm/clang.
Après l'installation de clang je ne peux pas compiler mes vieux c-projets (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 il n'a toujours pas de travail.
Quelqu'un aurait-il une idée de comment je peux résoudre ce problème?
- Essayez d'installer
libc0.1-dev
. - Pour Mac, voir: stackoverflow.com/questions/1365211/...
- double possible de Manquant crt1 et crti quand crosscompiling
- C'est un BUG qui est rapporté dans le launchpad, mais il y a une solution : askubuntu.com/questions/251978/...
Vous devez vous connecter pour publier un commentaire.
Debian /Ubuntu
Le problème est vraisemblablement que la gcc pour votre architecture actuelle et c'est 64 bits. Vous avez besoin de 32bit fichiers de prise en charge. Pour cela, vous devez installer
sudo apt-get install gcc-multilib
et il a fixé mon erreur degfortran -m32 ...
Ce qui m'a aidé est de créer un lien symbolique:
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 avez repris l'gcc.
Vous pouvez le faire comme ceci sur Debian:
Ubuntu:
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 systèmes:
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.
apk add libc-dev=0.7.1-r0
C'est un BUG signalé dans le launchpad, mais il y a une solution :
Le lancer pour voir où ces fichiers sont situés
puis ajouter ce chemin à LIBRARY_PATH variable
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/LibraryPathOverviewNoter que le simple fait de créer un lien symbolique ne fera que vous donner un architecture 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.
Après la lecture de la http://wiki.debian.org/Multiarch/LibraryPathOverview que jérémie posté, j'ai trouvé la gcc drapeau qui fonctionne sans le lien:
Ainsi, vous pouvez simplement ajouter
-B/usr/lib/x86_64-linux-gnu
à la variable CFLAGS dans votre Makefile.Pour obtenir RHEL 7 64-bit pour compiler gcc 4.8 programmes 32 bits, vous aurez besoin de faire deux choses.
Assurez-vous que tous les 32-bits gcc 4.8 outils de développement sont complètement installés:
Compiler des programmes utilisant l'-m32 drapeau
volée à partir d'ici : Comment faire pour Compiler des Applications 32 bits sur 64 bits RHEL? - je n'avais qu'à faire l'étape 1.
Comme expliqué dans l'irtc.o fichier manquant , il est préférable d'utiliser des "gcc-imprimer-rechercher-dirs" pour trouver tous les le chemin de recherche. Puis créer un lien comme expliquer ci-dessus "sudo ln -s" pour pointer vers l'emplacement de crt1.o
./configure --disable-multilib
travaille pour elle
Cela a fonctionné pour moi avec Ubuntu 16.04
Couru dans cette sur CentOs 5.4. Remarqué que lib64 contenait la crt*.o fichiers, mais lib n'a pas. Installé glibc-devel par yum qui a installé le i386 bits et cela a résolu mon problème.
Même j'ai eu la même erreur de compilation quand j'ai été la compilation croisée i686-cm-linux-gcc.
Ci-dessous l'option de compilation résolu mon problème
Remarque: Le sysroot doit pointer vers compilateur répertoire où usr/include disponible
Dans mon cas, la suite d'outils est installé dans /opt/outils/i686-cm-linux-gcc répertoire et usr/include est également disponible dans le même répertoire
Je l'ai résolu comme suit:
1) essayez de localiser ctr1.o et ctri.o fichiers à l'aide de
find -name ctr1.o
J'ai eu de la suite dans mon ordinateur:
$/usr/lib/i386-linux/gnu
2) Ajouter ce chemin d'accès à
PATH
(égalementLIBRARY_PATH
) variable d'environnement (afin de voir qui est le nom: typeenv
de commande dans le Terminal):J'ai eu le même problème aujourd'hui, je l'ai résolu en installant les paquets recommandés:
libc6-dev-mipsel-croix libc6-dev-mipsel-croix, libc-dev-mipsel-croix
Cela a fonctionné:
Dans mon cas, le crti.o erreur a été entraîné par le chemin d'exécution de la configuration à partir de Matlab.
Par exemple, vous ne pouvez pas exécuter un fichier si vous n'avez pas défini le chemin d'accès à votre dossier d'exécution plus tôt.
Pour ce faire: Fichier > setPath, ajouter à votre répertoire et de les enregistrer.
utilisation
gcc -B lib_path_containing_crt?.o
Dans mon cas
Ubuntu 16.04
je n'ai pas decrti.o
à tous:Alors j'ai installer le développeur de la libc6paquet-dev: