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?
comment définir la variable env LD_LIBRARY_PATH?
Vous l'avez déjà défini lorsque vous avez fait cela:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64
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 le -L
option de l'éditeur de liens. Vous l'avez déjà fait aussi:
-L /usr/lib64
Si l'erreur persiste, vous devez vous assurer que la bibliothèque est bien là. Avez-vous un fichier libboost_regex-mt.so
ou libboost_regex-mt.a
dans ce (ou tout) répertoire? Notez qu'un fichier comme libboost_regex-mt.so.othersuffix
ne compte pas à cette fin. Si vous ne l'avez pas, vous devrez probablement installer le package de développement de votre distribution pour cette bibliothèque.
Une autre façon d'ajouter définitivement un nouveau chemin dans LD_LIBRARY_PATH:
Éditer .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-à-dire /usr/local/hdf5/lib
, à x86_64-linux-gnu.conf
fichier. Mettez simplement la ligne suivante. Sauver.
Exécutez ensuite Sudo ldconfig
Ça a marché.
PS: OS Ubuntu 14.04
Vous pouvez le définir dans votre ~/.profile
et/ou un fichier d'initialisation 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:
env | grep '^LD_LIBRARY_PATH'
ÉDITER: 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 suivi de chiffres séparés par des points afin de distinguer les différentes versions. Il est possible que malgré LD_LIBRARY_PATH
, une bibliothèque est introuvable en raison de la non-concordance d'ABI. Notez également que les langages (comme Perl et Python) et les packages peuvent avoir leur propre système de bibliothèques (éventuellement aussi avec .so
fichiers), sans rapport avec LD_LIBRARY_PATH
.
Si votre erreur de chemin de 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.
Résolu avec:
ajouter dans /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