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
La commande perl
ci-dessus effectue deux modifications sur les specs de GCC :
elle supprime « /tools » des chemins de l'éditeur de liens
et ajoute « /usr/lib » à startfile_prefix_spec. C'est
une bonne idée d'examiner visuellement le fichier specs
, et de comparer avec la sortie de
gcc -dumpspecs, pour
vérifier que le changement voulu a bien été effectué en fin de
compte.
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 'int 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 dernière commande sera :
[Requesting program interpreter: /lib/ld.so.1]
Pour l'API N32 :
echo 'int 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 dernière commande sera :
[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 dernière commande sera :
[Requesting program interpreter: /lib64/ld.so.1]
Remarquez que /lib
, /lib32
ou /lib64
est maintenant le préfixe de notre éditeur de lien.
Si la sortie n'apparaît pas comme montrée 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