Ich erstelle ein einfaches C ++ - Programm und möchte eine vom System bereitgestellte gemeinsam genutzte Bibliothek vorübergehend durch eine neuere Version ersetzen, um sie zu entwickeln und zu testen.
Ich habe versucht, die Variable LD_LIBRARY_PATH zu setzen, aber der Linker (ld) ist fehlgeschlagen mit:
/ usr / bin / ld: -lyaml-cpp kann nicht gefunden werden
Ich habe erwartet, dass das funktioniert, weil laut der ld-Manpage:
Der Linker verwendet die folgenden Suchpfade, um die erforderlichen gemeinsam genutzten Bibliotheken zu finden: ... Bei einem nativen Linker wird der Inhalt der Umgebungsvariablen "LD_LIBRARY_PATH" ...
Ich habe dann versucht, LIBRARY_PATH zu setzen, und das hat funktioniert.
Laut 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 so angegebenen Verzeichnisse bei der Suche nach speziellen Linkerdateien zu verwenden, wenn diese mit GCC_EXEC_PREFIX nicht gefunden werden können. Bei der Verknüpfung mit GCC werden diese Verzeichnisse auch verwendet, wenn nach normalen Bibliotheken für die Option -l gesucht wird (mit -L angegebene Verzeichnisse stehen jedoch an erster Stelle).
Wie im Handbuch (GCC) vorgeschlagen, funktioniert LIBRARY_PATH, weil ich mit GCC verknüpfe.
Aber..
- Da ich mit gcc verlinke, warum wird ld aufgerufen, wie die Fehlermeldung andeutet?
- Was bringt es, wenn zwei Variablen denselben Zweck erfüllen? Gibt es noch andere Unterschiede?