Éditeurs de liens, chargeurs et exécutables

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 ?

  1. Afoo contient une erreur de syntaxe
  2. Bfoo est défini dans deux fichiers
  3. Cfoo est appelé, mais le fichier ou la bibliothèque qui définit son contenu n'est pas inclus dans l'édition de liens
Afficher la réponse et l'explication

Réponse : C. foo est appelé, mais le fichier ou la bibliothèque qui définit son contenu n'est pas inclus dans l'édition de liens

Si la fonction est déclarée dans un fichier d'en-tête, la compilation réussit. Mais si, lors de l'édition de liens, le fichier objet ou la bibliothèque définissant foo est introuvable, l'adresse à placer dans l'instruction d'appel ne peut être fixée, d'où cette erreur. Les causes fréquentes sont l'oubli de lier le fichier de définition, l'oubli de spécifier une bibliothèque (-lm, etc.), ou une différence d'orthographe ou d'arguments qui produit un autre nom.

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

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

  1. La même fonction globale void init(void), sans static, est définie à la fois dans a.c et b.c, puis on effectue l'édition de liens. Que se passe-t-il ?
  2. Quel est l'effet de la définition d'une fonction avec static en C (par exemple static int helper(void)) ?
  3. Que signifie l'écriture « extern int count; » en C ?
  4. Quelle affirmation concernant les fichiers au format ELF, courant sous Linux notamment, est correcte ?
  5. Que contient la section .text d'un exécutable ?

Comparatifs sur ce thème