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?
- AIn foo steckt ein Syntaxfehler
- Bfoo ist in zwei Dateien definiert
- 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.