Comment puis-je créer un ancien gcc (en particulier, 4.5.2) sur Ubuntu 11.10 et éviter les erreurs sur "/ usr / bin / ld: impossible de trouver crti.o: aucun fichier ou répertoire"?
J'ai creusé un peu et trouvé plusieurs éléments similaires, mais aucun ne résout réellement mon problème:
- J'ai vérifié que tous mes packages (libc6-dev et similaires) sont réinstallés par cette question
- J'ai vérifié que crti.o existe dans / usr / lib32 et / usr / lib / x86_64-linux-gnu, et que mon ld.so.conf est configuré pour regarder dans ces répertoires
- J'ai vérifié que l'ajout de mon invocation de make avec LIBRARY_PATH = / usr / lib / x86_64-linux-gnu fonctionne, mais j'aimerais éviter cela (cela devient un point de divergence dans les makefiles)
- J'ai essayé différentes choses avec --with-build-sysroot, mais sans succès (lire: peut-être que je ne connais pas le bon indicateur à définir)
Lors de l'exécution avec strace (selon cette réponse ), je peux voir la référence nue à crti.o:
13240 open ("crti.o", O_RDONLY) = -1 ENOENT (Aucun fichier ou répertoire de ce type)
Merci!
Même de très nouvelles versions de GCC échouent avec ce message. C'est parce que les nouvelles versions de Debian / Ubuntu prennent en charge le multiarchitecture (c'est-à-dire l'installation de binaires pour plusieurs machines dans un seul système de fichiers), donc les bibliothèques ont été éloignées des emplacements standard.
Il existe des correctifs GCC pour le corriger ici (versions finales non encore approuvées, mais correctes pour Ubuntu), et ils s'appliquent probablement aux anciens GCC sans trop d'effort, peut-être. Je pense que vous devez configurer GCC avec --enable-multiarch , ou quelque chose.
En attendant, la création de liens logiciels est une bonne solution:
(le nom du dossier sera différent sur les installations 32 bits).
J'espère que cela pourra aider.
la source
J'ai résolu ce problème avec quelques solutions de contournement qui pourraient vous être utiles.
Tout d'abord, compilez GCC avec
LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
, pour que le processus de démarrage de build sache où trouver lescrt?.o
fichiers de démarrage.Ensuite, au lieu de créer des
crt?.o
liens symboliques/usr/lib
là où ils affectent l'ensemble de votre système, vous pouvez lier ces trois fichiers dans le${prefix}/lib/gcc/...
répertoire correspondant au${prefix}/bin
répertoire dans lequel l'gcc
exécutable est installé. C'est en fait presque en haut de son chemin de recherche pour les fichiers de démarrage, donc il les trouvera - mais ils n'affectent rien d'autre.Dans mon cas, le répertoire spécifique pour les mettre était
lib/gcc/x86_64-unknown-linux-gnu/4.3.2/
; vous pouvez trouver le bon car il contient déjà d'autres fichiers commecrtbegin.o
celui-ci.la source
J'ai construit GCC 4.1.2 sur Ubuntu precise x86_64. Comme vous l'avez fait, j'ai jeté un œil à la séquence de la dernière commande "xgcc" à la recherche de runtime c 32 bits, grep-ped / 32 / comme suit. Le runtime C dans le mien se trouve dans / usr / lib32 qui est fourni par le paquet libc6-dev-i386.
J'ai donc créé les liens symboliques crt? .O dans le répertoire recherché par xgcc.
J'ai réussi à construire GCC 4.1.2 avec.
la source