/ usr / local / libの共有ライブラリを使用します


59

私はソースからいくつかのライブラリを構築しましたmake installが、その後のファイルは/usr/local/lib

たとえば、私の場合libodb-2.2.so、このディレクトリにあるファイルがあります。

ただし、にリンクしている実行可能ファイルを起動するとlibodb、エラーが発生しました:共有ライブラリのロード中にエラーが発生しました:libodb-2.2.so: cannont open shared object file: No such file or directory.

実行可能ファイルを正しくビルドしていないということですか?または、フォルダにいくつかの興味深いライブラリがある可能性があることをシステムに示す必要がありますか/usr/local/lib

Ubuntu 12.04、Linuxカーネル3.2.0-38-genericを使用しています。



デバッガーと良好な友好関係を築くことを強くお勧めします
DDS

@DDSもう少し詳しく説明することをお勧めします。ここでのコラボレーションサイトであることはご存知でしょう。たとえば、gdbとにかくlink問題が解決する方法を示してください。私は本当に興味があります。最初はあなたの発言は問題とは無関係だと思われます。しかし、私は間違っているかもしれません。確かに、私は十分gdbに知りません、そしてライブラリのロード。
ステファンローランド

申し訳ありません...このコメントは、Cプログラミングに関する学習者の質問のstackoverflowに付けられるべきでした... U&L
DDS

Cプログラミングの学習、またはLinuxでの構築の学習の@DDS初心者ですか?もっと正確にお願いします。たとえば、私はWindowsから来ていました。だからといって、私がC ++を知らないというわけではありません...あなたの判断行動は正確ではないと思う傾向があります。SOであったとしても、あなたの行動はすぐにモデレーターの注意を引くでしょう。それに注意してください。あなたは、有用な知識を共有する熱狂的なプログラマーのCOLLABORATIVEサイトにいます。エゴを引き立てるようなデザインではありません。(私がSOを始めたとき、私も優しく/合理的に打ちのめされていることを心配しないでください。それは本当に良いことだったと思います)。
ステファン・ローランド

回答:


59

現在のセッションでは次のことができます

export LD_LIBRARY_PATH = / lib:/ usr / lib:/ usr / local / lib

または、変更を永続的にする/usr/local/libために/etc/ld.so.conf(またはそれに含まれるもの)追加しldconfigてrootとして実行できます。

それでも問題が解決しない場合は、実行ldd [executable name]すると、検索しようとしているライブラリと、見つからないライブラリが表示されます。


3
以下からのman用ページldd(1)「通常の場合、LDDは、標準の動的リンカ(参照呼び出しld.so(8)付き)LD_TRACE_LOADED_OBJECTSに設定した環境変数1ライブラリの依存関係を表示するには、リンカが発生し、。注意してください、しかし、そのいくつかの状況では、いくつかのバージョンldd5月。このように、あなたが採用するべきではありません直接プログラムを実行することで、依存関係の情報を取得しようとする試みldd信頼されていない実行ファイル。これは、任意のコードの実行につながる可能性があるため、扱う安全な代替信頼できない実行可能ファイルは次のとおりです。...」
SlySven

4
「... $ objdump -p /path/to/program | grep NEEDED
SlySven

いいですね-以前objdumpに出会ったことはありません。
フラップ

この記事によればこの答えは標準的に不正確有害です。正しいアプローチでは、コンパイル-Lおよび使用-rpath中にライブラリのリンク検索パスとランタイム検索パスを設定することが、この質問と回答によると正しい方法です。
クリフアームストロング

37

ldconfigライブラリの構築後にすでに実行している場合は、読み続けてください。そうでない場合は、最初にabout ldconfigをお読みください

/usr/local/libldconfigが使用するライブラリパスにない可能性があります。あなたはこれを行うことができます:

ldconfig /usr/local/lib

そして、これらはリンカーキャッシュに追加する必要がありますが、パスを適切に追加することをお勧めします。/etc/ld.so.conf.dディレクトリがあることを確認してください。その場合、ファイルを追加し(「usr-local.conf」など)、1行追加します。

/usr/local/lib

実行しldconfigます。ld.so.conf.dディレクトリーがない場合は、/etc/ld.so.conf ファイルが必要であり、その行にその行を追加できます


3
custom.confファイルを追加して/etc/ld.so.conf.dldconfigをsudoし、それを考慮に入れると、実行可能ファイルをすぐに開始できます。
ステファンローランド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.