LD_LIBRARY_PATHはどこですか?LD_LIBRARY_PATH環境変数を設定するにはどうすればよいですか?


26

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環境変数を設定するにはどうすればよいですか?


問題を理解するのに役立つコンテキストを提供しているときに、ほとんどの質問を編集したのはなぜですか?
jlliagre 14年

@jlliagre同意します。元の質問で提供されたコンテキストがなければ、トップ投票の答えは意味がありません。ロールバックしました。
John1024

回答:


25

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は、この目的にはカウントされないことに注意してください。それがない場合は、おそらくこのライブラリ用のディストリビューションの開発パッケージをインストールする必要があります。


Linuxでは、ld(1)のマニュアルページによると、以下$LD_LIBRARY_PATHも参照されldます。«5.ネイティブリンカーの場合、環境変数 "LD_LIBRARY_PATH"の内容を検索します。»
vinc17 14年

@csx-あなたのディストリビューションは何ですか?Ubuntu、Fedora、CentOSなど?例えばのために、ここを参照してください:stackoverflow.com/questions/15874220/...
SLM

@ vinc17、ldマンページからの引用は、再帰的な依存関係のみに関係しています。すでにリンクされるように選択されているライブラリの依存ライブラリです。ビルドする実行可能ファイルのライブラリを見つけることは関係ありません。それがそう-Lです。
セラダ14年

@csx科学Linuxについては何も知りませんが、apt-getコマンドが見つからない場合はDebianから派生したものではないため、不足しているパッケージをインストールする別の方法が必要です。それは間違いなくあなたの問題です。
セラダ14年

後期:リンクフェーズを含むか-Ldir -llibldまたはgcc/g++/etcリンクフェーズを含めるときの引数として機能makeする必要がLDFLAGS="whatever"ありますが、元の&復元されたQの言及:おそらく必要な通常のメイクファイルでは、賢いメイクファイルでは、賢いメイクファイルの作成者に投げかけるレンガなど、ほとんど何でも必要になる場合があります。
dave_thompson_085

11

LD_LIBRARY_PATHに新しいパスを永続的に追加する別の方法:

.confファイルを編集します/etc/ld.so.conf.d/

アプリケーションをインストールしたことがありますが、そのライブラリを別のアプリケーションが認識できませんでした。次に、パス/usr/local/hdf5/libx86_64-linux-gnu.confファイルに追加します。次の行に入れてください。セーブ。

次に実行する sudo ldconfig

出来た。

PS:OS Ubuntu 14.04


4

~/.profileシェルの特定のinitファイルおよび/または特定のinitファイルで設定できます(~/.bashrcbash、~/.zshenvzshなど)。次に、シェルを再起動する必要があります(選択に応じて、ログアウトして再度ログインすることもできます)。

次の方法で設定を確認できます。

env | grep '^LD_LIBRARY_PATH'

編集:LD_LIBRARY_PATHマシンコードを含む共有ライブラリ用です。ファイル名には通常.so、名前に含まれ、場合によっては異なるバージョンを区別するためにピリオドで区切られた数字が含まれます。にもかかわらずLD_LIBRARY_PATH、ABIの不一致のためにライブラリが見つからない可能性があります。また、言語(PerlやPythonなど)やパッケージには.so、に関係のない独自のライブラリシステム(おそらくファイルも含む)がある場合があることに注意してくださいLD_LIBRARY_PATH


私のコンパイル済みプログラムは、env | grep '^ LD_LIBRARY_PATH'。何が問題なのでしょうか?
ハーマントゥーロット

@HermanToothrot答えを更新しました。pythonには独自のライブラリシステムがあることに注意してください。LD_LIBRARY_PATH(通常のライブラリとの衝突を避けるために)使用しないと思われます。エラーメッセージが表示されたら、これについて特定の質問をする必要があります。
vinc17

3

ライブラリパスエラーがリンカにある場合、コンパイル中に、ライブラリへのパスを変数$ LD_LIBRARY_PATHに追加する必要があります。コンパイル済みプログラムを実際に実行するときにライブラリエラーが発生する場合は、ライブラリパスを/etc/ld.so.confに追加し、ldconfigを実行してライブラリ検索パスキャッシュを再構築する必要があります。


これはうまくいきました!confファイルはこのディレクトリ/etc/ld.so.conf.dを指しているので、libsパスを含むファイルをそのフォルダに追加するだけです。また、必ずldconfigをルートとして(またはsudoで)
実行してください-RLaaa

0

で解決:

に追加 /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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.