impossible de trouver crti.o: aucun fichier ou répertoire de ce type

19

Quand je veux créer gcc 4.1.2 ( ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-4.1.2/gcc-4.1.2.tar.bz2 ) sur mon Ubuntu 12.04 (x86_64). Le gcc actif actuel est 4.6.2. J'ai fait:

./configure

ensuite

make

Cependant, je reçois cette erreur

/usr/bin/ld: cannot find crti.o: No such file or directory
collect2: ld returned 1 exit status

En recherchant sur le Web, il semble qu'il y ait un problème avec l'emplacement de crti. Ces fichiers sont disponibles sur le système

# find /usr/ -name crti*
/usr/lib32/crti.o
/usr/lib/x86_64-linux-gnu/crti.o
/usr/lib/debug/usr/lib/x86_64-linux-gnu/crti.o

Le paquet de développement libc6 est également installé

# dpkg -l | grep libc6
ii  libc6                                  2.15-0ubuntu10.3                          Embedded GNU C Library: Shared libraries
ii  libc6-dbg                              2.15-0ubuntu10.3                        Embedded GNU C Library: detached debugging symbols
ii  libc6-dev                              2.15-0ubuntu10.3                        Embedded GNU C Library: Development Libraries and Header Files
ii  libc6-dev-i386                         2.15-0ubuntu10.3                        Embedded GNU C Library: 32-bit development libraries for AMD64
ii  libc6-i386                             2.15-0ubuntu10.3                        Embedded GNU C Library: 32-bit shared libraries for AMD64
ii  libc6-pic                              2.15-0ubuntu10.3                        Embedded GNU C Library: PIC archive library

Comment puis-je résoudre ce problème?

MISE À JOUR:

Après avoir ajouté ces

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH 

Ce problème est résolu. Mais maintenant je reçois

/usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libc.a when searching for -lc
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/x86_64-linux-gnu/crti.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/x86_64-linux-   gnu/crtn.o' is incompatible with i386 output
collect2: ld returned 1 exit status
mahmood
la source
Je reçois d'autres erreurs, de makeinfone pas être présent, qui se trouvent sur mon système. Impossible d'obtenir votre erreur avec ces étapes.
gertvdijk

Réponses:

13

Il s'agit d'un BUG signalé dans le tableau de bord, mais il existe une solution de contournement:

compiler un programme 64 bits sur une plateforme 32 bits:

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH

pour 32 bits natif:

LIBRARY_PATH=/usr/lib32:$LIBRARY_PATH
export LIBRARY_PATH

Que dans votre fichier .bashrc (ou exécuté à partir d'une console) suffit à GCC pour trouver le nouvel emplacement de la bibliothèque.

THX. à Iain Buclaw (ibuclaw) pour indiquer dans la bonne direction.

12.10 32 bits

hhlp@hhlp:~$ sudo find /usr/ -name crti*
/usr/lib/i386-linux-gnu/crti.o
hhlp@hhlp:~$ 

LIBRARY_PATH=/usr/lib/i386-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH

12.10 64 bits

hhlp@hhlp:~$ sudo find /usr/ -name crti*
/usr/lib/x86_64-linux-gnu/crti.o
hhlp@hhlp:~$ 

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH
hhlp
la source
Ce problème est résolu. Cependant, je reçois une nouvelle erreur. S'il vous plaît voir le message d'origine
mahmood
2
Merci mais ce n'était pas la solution au deuxième problème. J'ai trouvé que je devais faire ./configure --disable-multilibet reconstruire à partir de zéro selon gcc.gnu.org/ml/gcc-help/2009-05/msg00238.html Merci pour votre aide
mahmood
Ne fonctionne pas avec Ubuntu 16.04 et ma version.
Niklas
Je suis confronté au même problème, mais lors make installde la dernière étape. J'ai défini LIBRARY_PATH mais en vain !! Toute aide appréciée
faizan
1
Après avoir utilisé cela, j'ai eu le problème "Le répertoire actuel ne devrait pas être dans LIBRARY_PATH` provoqué par un LIBRARY_PATH précédemment vide. Par conséquent, utilisez export LIBRARY_PATH="/usr/lib/x86_64-linux-gnu${LIBRARY_PATH+:$LIBRARY_PATH}"ou (si vous savez qu'il est vide)export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
Flamefire
1

Dans mon cas, Ubuntu 16.04je n'ai pas crti.odu tout:

$ find /usr/ -name crti*

J'installe donc le package développeur:

sudo apt-get install libc6-dev
Eugen Konkov
la source
0

En construisant GCC 4.8 sur x86-64 à partir de sources en amont, vous rencontrez le problème d'avoir besoin de construire des bibliothèques 32 et 64 bits (sauf si la multi-lib est désactivée). Dans ce cas, vous devez ajouter les deux chemins d'accès /usr/lib/x86_64-linux-gnuet /usr/lib32.

John Vreeland
la source
Par défaut oui. Mais vous pouvez limiter la construction à seulement 64 bits avec l'option --with-multilib-list = m64 pour ./configure. Cela a fonctionné pour moi lorsque j'ai construit GCC 4.8.5. Je l'ai également mentionné dans ma réponse (partie 3) sur stackoverflow.com/a/55703805/4807875 .
Alexander Samoylov
0

Je construis également une ancienne version de gcc sur ma machine Ubuntu (3.4.6 sur une machine 4.6.3)
J'ai essayé la solution --disable-multilib de @ mahmood, mais le package dont j'avais besoin pour utiliser gcc 3.4.6 semblait également d'avoir également besoin de la bibliothèque 32 bits.

J'ai donc ajouté les bibliothèques 64 bits et 32 ​​bits à LIBRARY_PATH

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/usr/lib32:$LIBRARY_PATH 
export LIBRARY_PATH 

Oh et je suis sur Ubuntu 12.04 64bits

Heartinpiece
la source
1
Pour travailler avec gcc / g ++ plus ancien, vous devez oublier Ubuntu car sur une version plus récente d'Ubuntu, vous ne pouvez pas résoudre complètement le problème et un Ubuntu plus ancien d'autre part n'est plus pris en charge. Vous devez utiliser des systèmes basés sur rehdat. Centos 6.3 est ok
mahmood