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?

  1. ADer Linker verarbeitet von links nach rechts und entnimmt Funktionen, die zum Zeitpunkt des Lesens der Bibliothek noch nicht referenziert sind, nicht
  2. BWeil laut Regel immer nur eine Bibliothek ganz am Ende des Befehls stehen darf
  3. 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.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Linker, Loader und ausführbare Formate

  1. Welche Aussage zum positionsunabhängigen Code (PIC) ist richtig?
  2. Welche Aufgabe hat die bei Shared Libraries verwendete GOT (Global Offset Table)?
  3. Welche Aussage trifft beim dynamischen Linken zu, wenn mit der PLT (Procedure Linkage Table) späte Bindung (Lazy Binding) verwendet wird?
  4. Welche Aufgabe hat der dynamische Linker (z. B. ld.so), der beim Start eines dynamisch gelinkten Programms unter Linux tätig wird?
  5. Welche Aussage zum Zweck von ASLR (Address Space Layout Randomization) ist richtig?

Vergleiche zu diesem Thema