Ich versuche, ein C ++ - Programm mit Unix zu erstellen.
Ich habe den Fehler bekommen
Linking CXX executable ../../bin/ME
/usr/bin/ld: cannot find -lboost_regex-mt
Ich habe gehört, dass ich nur die Position von libboost * in meiner LD_LIBRARY_PATH-Umgebungsvariablen festlegen und make dann wie ursprünglich durch Eingabe aufrufen muss
-L /usr/lib64 -l boost_regex-mt
oder
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64
Aber wo ist LD_LIBRARY_PATH? Wie setze ich die Variable LD_LIBRARY_PATH env?
Antworten:
Sie haben es bereits festgelegt, als Sie dies getan haben:
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 zum Auffinden von Bibliotheken, die von den erstellten Tools selbst benötigt werden!).Um dem Linker beim Erstellen mitzuteilen, wo sich Bibliotheken befinden, müssen Sie die
-L
Linker-Option verwenden. Das hast du auch schon gemacht:Wenn der Fehler weiterhin auftritt, müssen Sie sicherstellen, dass die Bibliothek tatsächlich vorhanden ist. Haben Sie eine Datei
libboost_regex-mt.so
oderlibboost_regex-mt.a
in diesem (oder einem anderen) Verzeichnis? Beachten Sie, dass eine Datei wielibboost_regex-mt.so.othersuffix
diese 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.quelle
$LD_LIBRARY_PATH
auchld
Folgendes aufgerufen: «5. Durchsuchen Sie für einen nativen Linker den Inhalt der Umgebungsvariablen" LD_LIBRARY_PATH ". »ld
Manpage betrifft nur rekursive Abhängigkeiten: abhängige Bibliotheken einer Bibliothek, die bereits zum Verknüpfen ausgewählt wurde. Es geht nicht darum, Bibliotheken für die zu erstellende ausführbare Datei zu finden. Das ist was-L
tut.apt-get
Sie den Befehl nicht gefunden haben, ist er nicht von Debian abgeleitet, so dass Sie eine andere Methode benötigen, um das fehlende Paket zu installieren. Genau das ist dein Problem.-Ldir -llib
sollte als Argumente fürld
oder für diegcc/g++/etc
Einbindung der Link-Phase dienen, aber original & restaurierte Q-Erwähnungenmake
: Mit einem normalen Makefile benötigen Sie wahrscheinlichLDFLAGS="whatever"
und mit einem cleveren Makefile benötigen Sie möglicherweise fast alles, auch Steine, um den cleveren Makefile-Autor anzugreifen.Eine andere Möglichkeit, einen neuen Pfad dauerhaft in LD_LIBRARY_PATH hinzuzufügen:
.conf
Datei bearbeiten in/etc/ld.so.conf.d/
.Ich habe jemals eine Anwendung installiert und ihre Bibliotheken konnten von keiner anderen Anwendung erkannt werden. Dann füge ich den Pfad hinzu, dh
/usr/local/hdf5/lib
zurx86_64-linux-gnu.conf
Datei. Gib einfach die nächste Zeile ein. Speichern.Dann renne
sudo ldconfig
Es funktionierte.
PS: OS Ubuntu 14.04
quelle
Sie können es in Ihrer
~/.profile
und / oder spezifischen Init-Datei Ihrer Shell einstellen (zB~/.bashrc
für bash,~/.zshenv
für zsh). Dann müssen Sie Ihre Shell neu starten (und sich möglicherweise abmelden und wieder anmelden, abhängig von Ihrer Wahl).Sie können Ihre Einstellungen überprüfen mit:
BEARBEITEN:
LD_LIBRARY_PATH
ist für gemeinsam genutzte Bibliotheken gedacht, die Maschinencode enthalten, dessen Dateinamen normalerweise.so
in ihrem Namen enthalten sind, möglicherweise gefolgt von Zahlen, die durch Punkte voneinander getrennt sind, um verschiedene Versionen zu unterscheiden. Es ist jedoch möglich, dassLD_LIBRARY_PATH
eine Bibliothek aufgrund einer ABI-Nichtübereinstimmung nicht gefunden wird. Beachten Sie auch, dass Sprachen (wie Perl und Python) und Pakete möglicherweise ein eigenes Bibliothekssystem haben (möglicherweise auch mit.so
Dateien), das nichts damit zu tun hatLD_LIBRARY_PATH
.quelle
LD_LIBRARY_PATH
(um Kollisionen mit den üblichen Bibliotheken zu vermeiden). Dazu müssen Sie eine bestimmte Frage mit der Fehlermeldung stellen, die Sie erhalten.Wenn sich Ihr Bibliothekspfadfehler im Linker befindet, müssen Sie während des Kompilierens den Pfad zur Bibliothek in die Variable $ LD_LIBRARY_PATH einfügen. Wenn der Bibliotheksfehler auftritt, wenn Sie das kompilierte Programm tatsächlich ausführen, müssen Sie den Bibliothekspfad zu /etc/ld.so.conf hinzufügen und ldconfig ausführen, um den Cache des Bibliothekssuchpfads neu zu erstellen.
quelle
Gelöst mit:
hinzufügen
/etc/systemd/system/pm2-node.service
quelle