Éditeurs de liens, chargeurs et exécutables

Avec l'éditeur de liens GNU, écrire une bibliothèque statique avant le fichier objet qui l'utilise, comme « gcc -lmylib main.o », peut provoquer une erreur de référence non définie. Quelle en est la raison ?

  1. AL'éditeur de liens traite de gauche à droite et n'extrait pas les fonctions qui ne sont pas encore référencées au moment où il lit la bibliothèque
  2. BPar règle, une seule bibliothèque peut être écrite, et toujours en fin de commande
  3. CÉcrire la bibliothèque en premier efface son contenu
Afficher la réponse et l'explication

Réponse : A. L'éditeur de liens traite de gauche à droite et n'extrait pas les fonctions qui ne sont pas encore référencées au moment où il lit la bibliothèque

L'éditeur de liens GNU traite les fichiers dans l'ordre de la ligne de commande et, lorsqu'il rencontre une bibliothèque statique, n'en extrait que les objets résolvant « des références dont la définition n'a pas encore été trouvée ». Si la bibliothèque vient en premier, les références de main.o n'existent pas encore à ce moment, rien n'est extrait, et il ne revient pas en arrière après avoir lu main.o. Le principe est donc d'écrire les bibliothèques après ceux qui les utilisent.

S'entraîner sur ce thème Retour au thème

Autres questions sur Éditeurs de liens, chargeurs et exécutables

  1. Quelle description du code indépendant de la position (PIC) est correcte ?
  2. Quel est le rôle de la GOT (table globale des déplacements) utilisée dans les bibliothèques partagées ?
  3. En édition de liens dynamique, quelle description de la liaison différée (lazy binding) utilisant la PLT (table de liaison des procédures) est correcte ?
  4. Quel est le rôle de l'éditeur de liens dynamique (ld.so, etc.) qui intervient au démarrage d'un programme à liens dynamiques sous Linux ?
  5. Quel est l'objectif de l'ASLR (randomisation de l'agencement de l'espace d'adressage) ?

Comparatifs sur ce thème