Es ist möglich, dass während der Kompilierung mehr als eine Instanz der Bibliothek im Suchpfad vorhanden ist. In welcher Reihenfolge werden Linker Verzeichnisse verarbeiten, die im Suchpfad enthalten sind? Die fragliche Plattform ist Sun OS.In welcher Reihenfolge verarbeitet der Linker die Bibliotheksverzeichnisse?
Antwort
Die Verzeichnisse werden in der Reihenfolge durchsucht, in der sie in der Befehlszeile angegeben sind. Verzeichnisse, die in der Befehlszeile angegeben sind, werden vor den Standardverzeichnissen gesucht. Alle -L-Optionen gelten für alle -l-Optionen, unabhängig von der Reihenfolge, in der die Optionen angezeigt werden. LD_LIBRARY_PATH kann auch verwendet werden, um den Bibliothekssuchpfad zu ergänzen. Die Verzeichnissuche stoppt beim ersten Verzeichnis, das die passende Bibliothek enthält. obwohl
LD_LIBRARY_PATH ist heikel:
LD_LIBRARY_PATH
Eine Liste von Verzeichnissen, in denen für die Bibliotheken suchen, angegeben mit die Option -l. Mehrere Verzeichnisse sind durch einen Doppelpunkt getrennt. In der am meisten allgemeinen Fall wird es durch ein Semikolon getrennt zwei Verzeichnislisten enthalten:
dirlist1; dirlist2
Wenn ld mit einer beliebigen Anzahl von Vorkommen -L, wie in genannt wird:
ld . . . -Lpath1 . . . -Lpathn . . .
dann ist der Suchpfad Bestellung:
dirlist1 path1 . . . pathn dirlist2 LIBPATH
Wenn die Liste der Verzeichnisse kein Semikolon enthalten, ist es 0.123.interpretiert als dirlist2.
LD_LIBRARY_PATH wird auch verwendet, um Bibliothek Suchverzeichnisse zu der Laufzeit-Linker anzugeben. Das heißt, wenn LD_LIBRARY_PATH in der Umgebung vorhanden ist, wird die Laufzeit-Linker die darin genannten Verzeichnisse suchen, vor seinem Standardverzeichnis für gemeinsam genutzte Objekte mit dem Programm bei der Ausführung verknüpft werden.
Bitte lesen Sie mehr darüber here.
Nur zur Bestätigung, ist das richtig, dass LD_LIBRARY_PATH nach allen -L Optionen betrachtet wird? – Leonid
Nein, nicht wirklich. Es hängt davon ab, ob es ein Semikolon enthält oder nicht. Wenn es nicht geht dann geht es nach allem -L, ansonsten Liste vor Semikolon geht zuerst, dann alle -L Optionen, dann Liste nach einem Semikolon. Ich werde meine Antwort aktualisieren, weil es schwer ist, dies in diesem großen Dokument zu finden. Beachten Sie auch, dass dies für Sun Linker gilt, nicht für GNUs. Ich bin mir nicht sicher, welches du benutzt. –