Linker, Loader und ausführbare Formate

Ein dynamisch gelinktes Programm startete nicht, nachdem es auf einen anderen Computer kopiert und ausgeführt wurde. Was ist die wahrscheinlichste Ursache?

  1. AWeil die ausführbare Datei den gesamten Code der Bibliotheken enthielt und zu groß war
  2. BWeil dynamisch gelinkte Programme laut Regel nur auf dem Computer laufen, auf dem sie erstellt wurden
  3. CWeil die benötigten Shared Libraries nicht vorhanden sind oder nur Versionen vorliegen, die nicht kompatibel sind
Antwort und Erläuterung anzeigen

Antwort: C. Weil die benötigten Shared Libraries nicht vorhanden sind oder nur Versionen vorliegen, die nicht kompatibel sind

Dynamisch gelinkte Programme verwenden die auf dem ausführenden Computer vorhandenen Shared Libraries. Fehlen die benötigten Bibliotheken oder gibt es nur alte Versionen, denen Funktionen fehlen, kann der dynamische Linker nicht binden, und der Start schlägt fehl. Unter Linux lässt sich mit dem Befehl ldd prüfen, welche Shared Libraries ein Programm benötigt und ob sie gefunden werden. Im Hinblick auf die einfache Verteilung wird teils bewusst statisch gelinkt.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Linker, Loader und ausführbare Formate

  1. Was bindet der Linker in die ausführbare Datei ein, wenn er mit einer statischen Bibliothek (.a-Datei) linkt?
  2. 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?
  3. Welche Aussage zum positionsunabhängigen Code (PIC) ist richtig?
  4. Welche Aufgabe hat die bei Shared Libraries verwendete GOT (Global Offset Table)?
  5. Welche Aussage trifft beim dynamischen Linken zu, wenn mit der PLT (Procedure Linkage Table) späte Bindung (Lazy Binding) verwendet wird?

Vergleiche zu diesem Thema