Qu'est-ce que Fichier objet ?

Fichier produit par le compilateur à partir d'un fichier source. Il contient le code machine, les valeurs initiales des données, la table des symboles et les informations de relocalisation, mais les adresses des autres fichiers n'y sont pas résolues : il n'est exécutable qu'après édition de liens.

Nom japonais: オブジェクトファイル

« Fichier objet » apparaît dans 5 questions d'entraînement réparties sur 2 thèmes, dont Éditeurs de liens, chargeurs et exécutables, Compilateurs.

Domaine: Éditeurs de liens, chargeurs et exécutables

S'entraîner : questions sur Fichier objet

Quelle affirmation concernant le fichier objet (.o) produit par le compilateur à partir d'un fichier source est correcte ?

  1. AC'est un programme complet directement exécutable par l'OS
  2. BC'est simplement le code source compressé, sans langage machine
  3. CIl contient du langage machine, mais les adresses des fonctions et variables situées dans d'autres fichiers ne sont pas encore fixées
Afficher la réponse et l'explication

Réponse : C. Il contient du langage machine, mais les adresses des fonctions et variables situées dans d'autres fichiers ne sont pas encore fixées

Un fichier objet contient le langage machine traduit des fonctions du fichier, les valeurs initiales des variables, la liste des noms définis ou référencés (table des symboles) et la liste des emplacements où des adresses seront renseignées ultérieurement (informations de relocalisation). Les instructions appelant une fonction d'un autre fichier, comme printf, conservent une valeur provisoire faute de connaître l'adresse. L'éditeur de liens rassemble plusieurs fichiers objets, fixe les adresses et produit l'exécutable.

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.

« Fichier objet » dans les explications

Questions mentionnant « Fichier objet » (5)

  1. Quelle affirmation concernant le fichier objet (.o) produit par le compilateur à partir d'un fichier source est correcte ?
  2. 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 ?
  3. En désassemblant un fichier objet, on constate que la destination de l'instruction appelant la fonction externe printf a une valeur provisoire comme 0. Quand cette valeur est-elle correctement renseignée ?
  4. Quel est l'enchaînement courant permettant d'obtenir un exécutable à partir d'un programme C ?
  5. Lors de l'édition de liens d'un programme C, l'erreur « undefined reference to `foo' » (référence non définie à foo) apparaît. Quelle est la cause la plus probable ?

Termes associés

Éditeur de liens (linker) Relocalisation Table des symboles Bibliothèque statique Édition de liens dynamique PLT (Procedure Linkage Table) GOT (table globale des décalages) Éditeur de liens dynamique Assembleur ASLR

Retour au glossaire