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

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 C-projects (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 fonctionné.

quelqu'un sait comment je peux réparer ça?

89
demandé sur Enigma 2011-06-13 15:35:19

17 réponses

Debian / Ubuntu

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

sudo apt install gcc-multilib
61
répondu Dmitry Pavlenko 2018-02-02 17:10:20

ce qui m'a aidé est de créer un lien symbolique:

sudo ln -s /usr/lib/x86_64-linux-gnu /usr/lib64
58
répondu Karel Lenc 2012-01-25 14:08:28

il semble que pendant que vous jouiez avec llvm/clang, vous(ou le gestionnaire de paquets) avez supprimé le paquet de développement de bibliothèque standard C existant ( eglibc sur Debian) ou peut-être que vous ne l'avez pas installé en premier lieu, donc vous devez le réinstaller, maintenant que vous êtes revenu à 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, puisque je ne peux pas le trouver sur packages.ubuntu.com, vous pouvez essayer d'installer libc6-dev directement.

ou sur des systèmes similaires à Redhat:

yum install glibc-devel

NB: bien que vous avez été brièvement répondu dans les commentaires, voici une réponse juste pour qu'il y ait un enregistrement dans le cas où quelqu'un rencontre celui-ci et pourrait être à la recherche d'une réponse, mais pas dans les commentaires ou le commentaire est pas assez explicite pour eux.

30
répondu Shinnok 2011-07-11 15:58:49

C'est un BUG rapporté dans launchpad, mais il y a une solution:

exécutez ceci pour voir où ces fichiers sont situés

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

puis ajouter ce chemin à la variable LIBRARY_PATH

$ export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH
25
répondu Umair R 2013-05-17 09:13:20

si vous utilisez la version de test de Debian, appelée "wheezy", vous avez peut-être été mordu par le passage à multiarchitecture. Plus d'informations sur le multiarchiv de Debian ici: http://wiki.debian.org/Multiarch

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

notez que la simple création d'un lien symbolique ne vous donnera qu'une architecture et que vous désactiverez essentiellement le multiarchiv. Même si cela peut être ce que vous voulez, il peut ne pas être la solution optimale.

17
répondu jeremiah 2012-06-19 12:56:54

après la lecture du http://wiki.debian.org/Multiarch/LibraryPathOverview que jeremiah a posté, j'ai trouvé le drapeau de gcc qui fonctionne sans le lien symbolique:

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

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

13
répondu alexm 2012-09-12 09:49:54

pour obtenir RHEL 7 64-bit pour compiler les programmes gcc 4.8 32-bit, vous aurez besoin de 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 le drapeau-m32

    gcc pgm.c -m32 -o pgm
    

volé d'ici: comment compiler des applications 32 bits sur du RHEL 64 bits? - I n'avait qu'à faire l'étape 1.

7
répondu bulltorious 2016-08-15 22:39:07

comme expliqué dans 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

5
répondu tienping 2017-05-23 12:26:27

est tombé là-dessus sur CentOs 5.4. J'ai remarqué que lib64 contenait le crt*.o dossiers, mais lib ne l'a pas fait. Installé glibc-devel par yum qui a installé les bits i386 et cela a résolu mon problème.

1
répondu Shrinivas 2013-03-20 06:49:03

./ configure --disable-multilib

œuvres

1
répondu Chunyang Kwok 2017-12-18 11:34:05

même moi j'ai eu la même erreur de compilation quand je compilais en cross i686-cm-linux-gcc.

l'option de compilation ci-dessous a résolu mon problème

$ i686-cm-linux-gcc a.c --sysroot=/opt/toolchain/i686-cm-linux-gcc

Note: Le systroot devrait pointer vers le répertoire du compilateur où usr / include disponible

dans mon cas, la chaîne d'outils est installée dans /opt / chaîne d'outils/i686-cm-linux-gcc directory et usr/include est également disponible dans le même répertoire

0
répondu Bhagavan 2013-08-28 09:12:53

cela a fonctionné pour moi avec Ubuntu 16.04

$ LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
$ export LIBRARY_PATH
0
répondu Niklas Rosencrantz 2017-03-31 07:07:40

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é:

sudo apt-get install libc6-dev-mipsel-cross
0
répondu krusty 2017-10-11 19:20:58

dans mon cas, l'IRTC.o une erreur a été provoquée par la configuration du chemin d'exécution à partir de Matlab. Par exemple, vous ne pouvez pas effectuer un fichier si vous n'avez pas défini le chemin de votre répertoire d'exécution plus tôt. Pour ce faire: Fichier > setPath, ajoutez votre répertoire et sauvegardez.

-1
répondu Kuro 2013-04-11 15:35:10

utiliser gcc-B lib_path_containing_crt?.o

-1
répondu James Chan 2013-07-29 09:05:28

je l'ai résolu comme suit:

1) Essayez de localiser ctr1.o et ctri.o fichiers en utilisant find -name ctr1.o

j'ai eu ce qui suit dans mon ordinateur: $/usr/lib/i386-linux/gnu

2) ajouter ce chemin à PATH (aussi LIBRARY_PATH ) variable d'environnement (afin de voir qui est le nom: type env commande dans le Terminal):

$PATH=/usr/lib/i386-linux/gnu:$PATH
$export PATH
-1
répondu pac88 2015-04-05 23:59:42

dans mon cas Ubuntu 16.04 Je n'ai pas de crti.o du tout:

$ find /usr/ -name crti*

J'installe donc developer libc 6 - dev package:

sudo apt-get install libc6-dev
-2
répondu Eugen Konkov 2016-10-19 11:24:00