
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_PATH
wird 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 -L
Linker-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.so
oder libboost_regex-mt.a
in diesem (oder einem anderen) Verzeichnis? Beachten Sie, dass eine Datei wie libboost_regex-mt.so.othersuffix
fü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 .conf
in /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/lib
zur x86_64-linux-gnu.conf
Datei, 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 ~/.profile
und/oder einer bestimmten Init-Datei Ihrer Shell festlegen (z. B. ~/.bashrc
für Bash, ~/.zshenv
fü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_PATH
gilt 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_PATH
haben , das nichts mit zu tun hat ..so
LD_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