Maintenant, on modifie le fichier de specs de GCC pour qu'il pointe vers le nouvel éditeur de liens dynamique. Une commande perl s'en charge :
gcc -dumpspecs | \
perl -p -e 's@/tools/lib/ld@/lib/ld@g;' \
-e 's@/tools/lib32/ld@/lib32/ld@g;' \
-e 's@/tools/lib64/ld@/lib64/ld@g;' \
-e 's@\*startfile_prefix_spec:\n@$_/usr/lib/ @g;' > \
$(dirname $(gcc --print-libgcc-file-name))/specs
C'est une bonne idée d'examiner visuellement le fichier de specs pour vérifier que le changement voulu a bien été effectué en fin de compte.
Note that /lib, /lib32, or /lib64 is
now the prefix of our dynamic linker.
Il est impératif à ce moment d'arrêter et de vous assurer que les fonctions basiques (compilation et édition des liens) de l'ensemble des outils ajusté fonctionnent comme prévu. Pour cela, effectuez une vérification d'intégrité :
Pour l'ABI 32 bits :
echo 'main(){}' > dummy.c
gcc ${BUILD32} dummy.c
readelf -l a.out | grep ': /lib'
Si tout fonctionne correctement, il ne devrait pas y avoir d'erreurs et la sortie de la commande sera (avec des différences spécifiques aux plateformes dans le nom de l'éditeur de liens) :
[Requesting program interpreter: /lib/ld.so.1]
For N32 ABI:
echo 'main(){}' > dummy.c
gcc ${BUILDN32} dummy.c
readelf -l a.out | grep ': /lib'
Si tout fonctionne correctement, il ne devrait pas y avoir d'erreurs et la sortie de la commande sera (avec des différences spécifiques aux plateformes dans le nom de l'éditeur de liens) :
[Requesting program interpreter: /lib32/ld.so.1]
Pour l'ABI 64 bits :
echo 'main(){}' > dummy.c
gcc ${BUILD64} dummy.c
readelf -l a.out | grep ': /lib'
Si tout fonctionne correctement, il ne devrait pas y avoir d'erreurs et la sortie de la commande sera (avec des différences spécifiques aux plateformes dans le nom de l'éditeur de liens) :
[Requesting program interpreter: /lib64/ld.so.1]
Note that /lib, /lib32 or /lib64 is
now the prefix of our dynamic linker.
Si la sortie n'apparaît pas comme montré ci-dessus ou qu'elle n'apparaît pas du tout, alors quelque chose ne va vraiment pas. Enquêtez et retracez les étapes pour savoir d'où vient le problème et comment le corriger. La raison la plus probable est que quelque chose s'est mal passé lors de la modification du fichier specs ci-dessus. Tout problème devra être résolu avant de continuer le processus.
Une fois que tout fonctionne correctement, nettoyez les fichiers de tests :
rm -v dummy.c a.out