LD_LIBRARY_PATH vs LIBRARY_PATH

Ich baue ein einfaches C ++ – Programm und möchte vorübergehend eine vom System bereitgestellte gemeinsame Bibliothek durch eine neuere Version für Entwicklung und Tests ersetzen.

Ich habe versucht, die Variable LD_LIBRARY_PATH zu setzen, aber der Linker (ld) ist fehlgeschlagen mit:

/ usr / bin / ld: kann -lyaml-cpp nicht finden

Ich habe erwartet, dass zu arbeiten, weil nach der ld-man-Seite:

Der Linker verwendet die folgenden Suchpfade, um die erforderlichen gemeinsam genutzten Bibliotheken zu finden: … Für einen systemeigenen Linker ist der Inhalt der Umgebungsvariablen “LD_LIBRARY_PATH” …

Ich habe dann versucht, den LIBRARY_PATH zu setzen, und das hat funktioniert.

Laut dem GCC-Handbuch:

Der Wert von LIBRARY_PATH ist eine durch Doppelpunkte getrennte Liste von Verzeichnissen, ähnlich wie PATH. Bei der Konfiguration als nativer Compiler versucht GCC die angegebenen Verzeichnisse bei der Suche nach speziellen Linker-Dateien zu verwenden, wenn sie diese nicht mit GCC_EXEC_PREFIX finden können. Bei der Verknüpfung mit GCC werden diese Verzeichnisse auch verwendet, wenn nach normalen Bibliotheken für die Option -l gesucht wird (die mit -L angegebenen Verzeichnisse werden jedoch zuerst angezeigt).

Wie im (GCC) Handbuch vorgeschlagen, funktioniert LIBRARY_PATH, weil ich mit GCC verlinke.

Aber..

  • Da ich mit gcc verbinde warum ld aufgerufen wird, wie die Fehlermeldung suggeriert?
  • Wozu dienen zwei Variablen, die demselben Zweck dienen? Gibt es noch andere Unterschiede?

Solutions Collecting From Web of "LD_LIBRARY_PATH vs LIBRARY_PATH"

LIBRARY_PATH wird von gcc vor der Kompilierung verwendet, um Verzeichnisse zu durchsuchen, die statische Bibliotheken enthalten, die mit Ihrem Programm verknüpft werden müssen.

LD_LIBRARY_PATH wird von Ihrem Programm verwendet, um Verzeichnisse zu suchen, die freigegebene Bibliotheken enthalten, nachdem es erfolgreich kompiliert und verknüpft wurde.

BEARBEITEN: Wie unten angegeben, können Ihre Bibliotheken statisch oder gemeinsam genutzt werden. Wenn es statisch ist, wird der Code in Ihr Programm kopiert und Sie müssen nicht nach der Bibliothek suchen, nachdem Ihr Programm kompiliert und verknüpft wurde. Wenn Ihre Bibliothek freigegeben ist, muss sie dynamisch mit Ihrem Programm verknüpft werden, und dann kommt LD_LIBRARY_PATH ins Spiel.

LD_LIBRARY_PATH wird durchsucht, wenn das Programm startet, LIBRARY_PATH wird nach der Verbindungszeit durchsucht.

Vorbehalt von Kommentaren :

  • Beim Verknüpfen von Bibliotheken mit ld (anstelle von gcc oder g++ ) werden die Umgebungsvariablen LIBRARY_PATH oder LD_LIBRARY_PATH nicht gelesen.
  • Wenn Bibliotheken mit gcc oder g++ LIBRARY_PATH , wird die Umgebungsvariable LIBRARY_PATH gelesen (siehe Dokumentation ” gcc verwendet diese Verzeichnisse bei der Suche nach normalen Bibliotheken” ).

Da ich mit gcc verbinde warum ld aufgerufen wird, wie die Fehlermeldung suggeriert?

gcc ruft ld intern auf, wenn es sich im Verknüpfungsmodus befindet.