Linker, Loader und ausführbare Formate
Beim GNU-Linker kann es zu einem Fehler wegen einer undefinierten Referenz kommen, wenn eine statische Bibliothek wie in „gcc -lmylib main.o“ vor der Objektdatei steht, die sie verwendet. Welcher Grund ist richtig?
- ADer Linker verarbeitet von links nach rechts und entnimmt Funktionen, die zum Zeitpunkt des Lesens der Bibliothek noch nicht referenziert sind, nicht
- BWeil laut Regel immer nur eine Bibliothek ganz am Ende des Befehls stehen darf
- CWeil der Inhalt der Bibliothek gelöscht wird, wenn sie vorne steht
Antwort und Erläuterung anzeigen
Antwort: A. Der Linker verarbeitet von links nach rechts und entnimmt Funktionen, die zum Zeitpunkt des Lesens der Bibliothek noch nicht referenziert sind, nicht
Der GNU-Linker verarbeitet die Dateien in der Reihenfolge der Kommandozeile und entnimmt beim Auftreten einer statischen Bibliothek nur Objekte, die „noch nicht aufgelöste Referenzen“ auflösen. Steht die Bibliothek zuerst, gibt es zu diesem Zeitpunkt noch keine Referenzen aus main.o, sodass nichts entnommen wird, und auch beim späteren Lesen von main.o wird nicht zurückgegangen, um zu suchen. Grundsätzlich wird die Bibliothek daher hinter die verwendende Datei geschrieben.