Linker, Loader und ausführbare Formate

Beim Linken eines C-Programms trat der Fehler „undefined reference to `foo'“ (undefinierte Referenz auf foo) auf. Was ist die wahrscheinlichste Ursache?

  1. AIn foo steckt ein Syntaxfehler
  2. Bfoo ist in zwei Dateien definiert
  3. Cfoo wird aufgerufen, aber die Datei oder Bibliothek mit der Definition von foo ist nicht in das Linken einbezogen
Antwort und Erläuterung anzeigen

Antwort: C. foo wird aufgerufen, aber die Datei oder Bibliothek mit der Definition von foo ist nicht in das Linken einbezogen

Ist die Funktion in einer Header-Datei deklariert, wird das Kompilieren bestanden. Findet sich beim Linken jedoch keine Objektdatei oder Bibliothek mit der Definition von foo, steht die in den Aufrufbefehl einzutragende Adresse nicht fest, und es kommt zu diesem Fehler. Häufige Ursachen sind, dass die definierende Datei nicht mitgelinkt wurde, dass die Bibliothek nicht angegeben wurde (z. B. -lm) oder dass durch Schreibweise oder Argumente ein anderer Name entsteht.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Linker, Loader und ausführbare Formate

  1. In a.c und b.c wurde jeweils eine globale Funktion gleichen Namens void init(void) ohne static definiert und gelinkt. Was geschieht?
  2. Welche Wirkung hat es, in C eine Funktion mit static zu definieren (z. B. static int helper(void))?
  3. Was bedeutet die Angabe „extern int count;“ in C?
  4. Welche Aussage zum unter Linux u. a. üblichen ELF-Format ist richtig?
  5. Was steht in der Section .text einer ausführbaren Datei?

Vergleiche zu diesem Thema