wo ist LD_LIBRARY_PATH? Wie stelle ich die Umgebungsvariable LD_LIBRARY_PATH ein?

wo ist LD_LIBRARY_PATH? Wie stelle ich die Umgebungsvariable LD_LIBRARY_PATH ein?

Ich versuche, ein C++-Programm unter Unix zu erstellen.

Ich habe den Fehler

Linking CXX executable ../../bin/ME
/usr/bin/ld: cannot find -lboost_regex-mt

Ich habe gehört, dass ich nur den Speicherort von libboost* in meiner Umgebungsvariable LD_LIBRARY_PATH festlegen und dann make wie ursprünglich aufrufen muss, indem ich

-L /usr/lib64 -l boost_regex-mt

oder

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64

Aber wo ist LD_LIBRARY_PATH? Wie stelle ich die Umgebungsvariable LD_LIBRARY_PATH ein?

Antwort1

Wie lege ich die Umgebungsvariable LD_LIBRARY_PATH fest?

Sie haben es bereits festgelegt, als Sie Folgendes getan haben:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64

Aber das wird Ihr Problem nicht lösen. $LD_LIBRARY_PATHwird zum Zeitpunkt der Ausführung konsultiert, um eine Liste zusätzlicher Verzeichnisse bereitzustellen, in denen nach dynamisch verknüpfbaren Bibliotheken gesucht werden kann. Es wird zum Zeitpunkt der Verknüpfung nicht konsultiert (außer vielleicht zum Auffinden von Bibliotheken, die von den erstellten Tools selbst benötigt werden!).

Um dem Linker zur Build-Zeit mitzuteilen, wo er Bibliotheken finden kann, müssen Sie die -LLinker-Option verwenden. Das haben Sie auch schon getan:

-L /usr/lib64

Wenn der Fehler weiterhin auftritt, müssen Sie sicherstellen, dass die Bibliothek tatsächlich vorhanden ist. Haben Sie eine Datei libboost_regex-mt.sooder libboost_regex-mt.ain diesem (oder einem anderen) Verzeichnis? Beachten Sie, dass eine Datei wie libboost_regex-mt.so.othersuffixfür diesen Zweck nicht zählt. Wenn Sie das nicht haben, müssen Sie wahrscheinlich das Entwicklungspaket Ihrer Distribution für diese Bibliothek installieren.

Antwort2

Eine andere Möglichkeit, dauerhaft einen neuen Pfad in LD_LIBRARY_PATH hinzuzufügen:

Datei bearbeiten .confin /etc/ld.so.conf.d/.

Ich habe schon einmal eine Anwendung installiert und ihre Bibliotheken konnten von einer anderen Anwendung nicht erkannt werden. Dann füge ich den Pfad, also /usr/local/hdf5/libzur x86_64-linux-gnu.confDatei, hinzu. Einfach in die nächste Zeile einfügen. Speichern.

Dann rennesudo ldconfig

Es funktionierte.

PS: Betriebssystem Ubuntu 14.04

Antwort3

Sie können es in Ihrer ~/.profileund/oder einer bestimmten Init-Datei Ihrer Shell festlegen (z. B. ~/.bashrcfür Bash, ~/.zshenvfür Zsh). Anschließend müssen Sie Ihre Shell neu starten (und sich je nach Ihrer Wahl möglicherweise abmelden und erneut anmelden).

Sie können Ihre Einstellungen wie folgt überprüfen:

env | grep '^LD_LIBRARY_PATH'

EDIT: LD_LIBRARY_PATHgilt für gemeinsam genutzte Bibliotheken, die Maschinencode enthalten, deren Dateinamen normalerweise enthalten .so, möglicherweise gefolgt von Zahlen, die durch Punkte getrennt sind, um verschiedene Versionen zu unterscheiden. Es ist möglich, dass eine Bibliothek trotz nicht gefunden wird, weil die ABI nicht übereinstimmt. Beachten Sie auch, dass Sprachen (wie Perl und Python) und Pakete möglicherweise ein eigenes System von Bibliotheken (möglicherweise auch mit Dateien) LD_LIBRARY_PATHhaben , das nichts mit zu tun hat ..soLD_LIBRARY_PATH

Antwort4

Gelöst mit:

hinzufügen/etc/systemd/system/pm2-node.service

Environment=PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/app/nodejs/local/nvm/versions/node/v7.8.0/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/home/node/.pm2
Environment=LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2
Environment=OCI_LIB_DIR=/opt/oracle/instantclient_12_2

verwandte Informationen