LD_LIBRARY_PATHはどこにありますか? LD_LIBRARY_PATH環境変数を設定するには?

LD_LIBRARY_PATHはどこにありますか? LD_LIBRARY_PATH環境変数を設定するには?

私は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、~/.zshenvzshなど)で設定できます。その後、シェルを再起動する必要があります(オプションでログアウトして再ログインすることもできます)。

以下で設定を確認できます。

env | grep '^LD_LIBRARY_PATH'

編集:LD_LIBRARY_PATH機械語コードを含む共有ライブラリの場合、そのファイル名は通常その名前に.so含まれ、その後に異なるバージョンを区別するためにピリオドで区切られた数字が続きます。ただし、LD_LIBRARY_PATHABIの不一致によりライブラリが見つからない可能性があります。また、言語(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

関連情報