J'essaye de construire un programme c ++ en utilisant Unix.
J'ai l'erreur
Linking CXX executable ../../bin/ME
/usr/bin/ld: cannot find -lboost_regex-mt
J'ai entendu dire qu'il me suffit de définir l'emplacement de libboost * dans ma variable env LD_LIBRARY_PATH, puis d'appeler make comme je l'ai fait à l'origine, en tapant
-L /usr/lib64 -l boost_regex-mt
ou
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64
Mais où est LD_LIBRARY_PATH? comment définir la variable env LD_LIBRARY_PATH?
Réponses:
Vous l'avez déjà défini lorsque vous avez fait cela:
Mais cela ne résoudra pas votre problème.
$LD_LIBRARY_PATH
est consulté au moment de l'exécution, pour fournir une liste de répertoires supplémentaires dans lesquels rechercher des bibliothèques pouvant être liées dynamiquement. Il n'est pas consulté au moment du lien (sauf peut-être pour localiser les bibliothèques requises par les outils construits eux-mêmes!).Afin d'indiquer à l'éditeur de liens où trouver les bibliothèques au moment de la construction, vous devez utiliser l'
-L
option de l' éditeur de liens. Vous l'avez déjà fait aussi:Si l'erreur persiste, vous devez vous assurer que la bibliothèque est bien là. Avez-vous un fichier
libboost_regex-mt.so
oulibboost_regex-mt.a
dans ce (ou tout) répertoire? Notez qu'un fichier commelibboost_regex-mt.so.othersuffix
ne compte pas à cet effet. Si vous ne l'avez pas, vous devrez probablement installer le package de développement de votre distribution pour cette bibliothèque.la source
$LD_LIBRARY_PATH
est également consulté parld
: «5. Pour un éditeur de liens natif, recherchez le contenu de la variable d'environnement" LD_LIBRARY_PATH ". »ld
page de manuel ne concerne que les dépendances récursives: les bibliothèques dépendantes d'une bibliothèque qui a déjà été sélectionnée pour être liée. Elle ne concerne pas la recherche de bibliothèques pour l'exécutable en cours de construction. C'est-L
ça.apt-get
vous donne une commande introuvable, elle n'est pas dérivée de Debian, vous avez donc besoin d'une autre méthode pour installer le paquet manquant. C'est certainement votre problème.-Ldir -llib
devrait fonctionner comme argument versld
ou versgcc/g++/etc
lors de l'inclusion de la phase de lien, mais Q original et restauré mentionnemake
: avec un makefile normal dont vous avez probablement besoinLDFLAGS="whatever"
et avec un makefile intelligent, vous pouvez avoir besoin de presque tout, y compris des briques à jeter à l'auteur du makefile intelligent.Une autre façon d'ajouter définitivement un nouveau chemin dans LD_LIBRARY_PATH:
Modifier le
.conf
fichier dans/etc/ld.so.conf.d/
.J'ai déjà installé une application et ses bibliothèques ne pouvaient pas être reconnues par une autre application. Ensuite, j'ajoute le chemin, c'est
/usr/local/hdf5/lib
-à- dire àx86_64-linux-gnu.conf
fichier. Mettez simplement la ligne suivante. Sauver.Ensuite, exécutez
sudo ldconfig
Ça a marché.
PS: OS Ubuntu 14.04
la source
Vous pouvez le définir dans votre
~/.profile
fichier init et / ou spécifique de votre shell (par exemple~/.bashrc
pour bash,~/.zshenv
pour zsh). Ensuite, vous devez redémarrer votre shell (et éventuellement vous déconnecter et vous reconnecter, selon votre choix).Vous pouvez vérifier vos paramètres avec:
EDIT:
LD_LIBRARY_PATH
est destiné aux bibliothèques partagées qui contiennent du code machine, dont les noms de fichiers contiennent généralement.so
dans leur nom, éventuellement suivis de nombres séparés par des points afin de distinguer les différentes versions. Il est possible que, malgréLD_LIBRARY_PATH
, aucune bibliothèque ne soit trouvée en raison de la non-concordance d'ABI. Notez également que les langues (comme Perl et Python) et les packages peuvent avoir leur propre système de bibliothèques (éventuellement aussi avec des.so
fichiers), sans rapport avecLD_LIBRARY_PATH
.la source
LD_LIBRARY_PATH
(pour éviter les collisions avec les bibliothèques habituelles). Vous devez poser une question spécifique à ce sujet, avec le message d'erreur que vous obtenez.Si votre erreur de chemin d'accès à la bibliothèque se trouve dans l'éditeur de liens, lors de la compilation, vous devez ajouter le chemin d'accès à la bibliothèque dans la variable $ LD_LIBRARY_PATH. Si l'erreur de bibliothèque survient lorsque vous exécutez réellement le programme compilé, vous devez ajouter le chemin de bibliothèque à /etc/ld.so.conf et exécuter ldconfig pour reconstruire le cache du chemin de recherche de bibliothèque.
la source
Résolu avec:
ajouter dans
/etc/systemd/system/pm2-node.service
la source