私はUnixを使ってC ++プログラムを構築しようとしています。
エラーが発生しました。
Linking CXX executable ../../bin/ME
/usr/bin/ld: cannot find -lboost_regex-mt
LD_LIBRARY_PATH環境変数でlibboost *の位置を設定してから、元のようにmakeを呼び出すことができると聞きました。
-L /usr/lib64 -l boost_regex-mt
または
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64
ところで、LD_LIBRARY_PATHはどこにありますか? LD_LIBRARY_PATH環境変数を設定するには?
答え1
LD_LIBRARY_PATH環境変数を設定するには?
次の操作を行ったときにすでに設定されています。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64
しかし、これは問題を解決しません。$LD_LIBRARY_PATH
動的にリンク可能なライブラリを検索するための追加のディレクトリのリストを提供するために、実行時に参照されます。リンク時には参照されません(ビルドツール自体に必要なライブラリを探す場合は除く!)。
ビルド時にリンカーにライブラリを見つける場所を知らせるには、-L
リンカーオプションを使用する必要があります。また、次のことを行いました。
-L /usr/lib64
それでもエラーが発生した場合は、ライブラリが実際に存在することを確認する必要があります。その(または任意の)ディレクトリにファイルまたはlibboost_regex-mt.so
ディレクトリがありますか?libboost_regex-mt.a
同様のファイルはlibboost_regex-mt.so.othersuffix
この目的で計算されません。ない場合は、ライブラリ用の展開開発パッケージをインストールする必要があります。
答え2
LD_LIBRARY_PATHに新しいパスを永続的に追加する別の方法は次のとおりです。
.conf
ファイルを編集します/etc/ld.so.conf.d/
。
一度アプリケーションをインストールしましたが、他のアプリケーションがそのライブラリを認識しませんでした。その後、ファイル/usr/local/hdf5/lib
にパスを追加しました。x86_64-linux-gnu.conf
次の行を入力してください。救う。
その後実行sudo ldconfig
効率的。
PS:オペレーティングシステムUbuntu 14.04
答え3
~/.profile
~/.bashrc
シェルおよび/または特定の初期化ファイル(bash、~/.zshenv
zshなど)で設定できます。その後、シェルを再起動する必要があります(オプションでログアウトして再ログインすることもできます)。
以下で設定を確認できます。
env | grep '^LD_LIBRARY_PATH'
編集:LD_LIBRARY_PATH
機械語コードを含む共有ライブラリの場合、そのファイル名は通常その名前に.so
含まれ、その後に異なるバージョンを区別するためにピリオドで区切られた数字が続きます。ただし、LD_LIBRARY_PATH
ABIの不一致によりライブラリが見つからない可能性があります。また、言語(PerlやPythonなど)やパッケージ.so
にもLD_LIBRARY_PATH
。
答え4
解決策:
に追加する/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