ライブラリは動的ライブラリです。オペレーティング システムに、実行時にライブラリの場所を知らせる必要があります。
そのためには、次の簡単な手順を実行する必要があります:
(1 ) ライブラリがどこにあるかわからない場合は見つけてください。
sudo find / -name the_name_of_the_file.so
(2) 動的ライブラリ パス環境変数 (LD_LIBRARY_PATH
) の存在を確認します。 )
$ echo $LD_LIBRARY_PATH
表示するものが何もない場合は、デフォルトのパス値を追加します (必要に応じて追加しません)
$ LD_LIBRARY_PATH=/usr/local/lib
(3) 希望のパスを追加し、エクスポートして、アプリケーションを試します。
パスは path.so.something
があるディレクトリでなければならないことに注意してください。 path.so.something
の場合 /my_library/path.so.something
にあります
$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my_library/
$ export LD_LIBRARY_PATH
$ ./my_app
ソース:http://www.gnu.org/software/gsl/manual/html_node/Shared-Libraries.html
試すことができるいくつかの解決策を次に示します。
ldconfig
AbiusX が指摘したように:ライブラリをインストールしたばかりの場合は、単に ldconfig を実行する必要があるかもしれません。
sudo ldconfig
<ブロック引用> ldconfig は、コマンドラインで指定されたディレクトリ、ファイル /etc/ld.so.conf、信頼できるディレクトリ (/lib および /usr/lib) にある最新の共有ライブラリへの必要なリンクとキャッシュを作成します。
通常、新しいライブラリをインストールするときにパッケージ マネージャーがこれを処理しますが、常にではありません。それが問題でなくても、ldconfig を実行しても害はありません。
開発パッケージまたは間違ったバージョン
それがうまくいかない場合は、Paul の提案もチェックして、ライブラリの「-dev」バージョンを探します。多くのライブラリは、開発パッケージと非開発パッケージに分割されています。このコマンドを使用して探すことができます:
apt-cache search <libraryname>
これは、間違ったバージョンのライブラリがインストールされている場合にも役立ちます。一部のライブラリは、Python など、異なるバージョンで同時に公開されています。
図書館の場所
適切なパッケージがインストールされていることが確実であり、ldconfig がそれを見つけられなかった場合は、非標準のディレクトリにある可能性があります。デフォルトでは、ldconfig は /lib
を検索します 、 /usr/lib
、および /etc/ld.so.conf
にリストされているディレクトリ と $LD_LIBRARY_PATH
.ライブラリが別の場所にある場合は、 /etc/ld.so.conf
の独自の行にディレクトリを追加できます 、ライブラリのパスを $LD_LIBRARY_PATH
に追加します 、またはライブラリを /usr/lib
に移動します .次に ldconfig
を実行します .
ライブラリがどこにあるかを調べるには、これを試してください:
sudo find / -iname *libraryname*.so*
(libraryname
を置き換えます あなたのライブラリの名前で)
$LD_LIBRARY_PATH
に行く場合 ルート、それを ~/.bashrc
に入れたいと思うでしょう ログインするたびに実行されるようにします:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/library
更新
以下に書いていることは共有ライブラリに関する一般的な回答として正しいですが、この種のメッセージの最も頻繁な原因は、パッケージをインストールしたが、そのパッケージの「-dev」バージョンをインストールしていないためだと思います。
まあ、それは嘘ではありません - libpthread_rt.so.1
はありません そのリストで。おそらく、お使いのライブラリに依存するように再構成して再構築するか、libpthread_rt.so.1
を提供するものをインストールする必要があります。 .
一般に、.so の後の数字はバージョン番号であり、それらが互いにシンボリック リンクになっていることがよくあります。そのため、バージョン 1.1 の libfoo.so を使用している場合、実際のファイルは libfoo.so.1.0 になります。 libfoo.so.1.0を指すシンボリックリンクfoo.soとfoo.so.1。また、バージョン 1.1 を他のバージョンを削除せずにインストールすると、libfoo.so.1.1 が作成され、libfoo.so.1 と libfoo.so が新しいバージョンを指すようになりますが、その正確なバージョンを必要とするコードは、 libfoo.so.1.0 ファイルを使用します。バージョン 1 API のみに依存しているが、1.0 か 1.1 かを気にしないコードは、libfoo.so.1 を指定します。 orip がコメントで指摘したように、これは http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html で詳しく説明されています。
あなたの場合、あなたはかもしれません libpthread_rt.so.1
のシンボリック リンクを回避する libpthread_rt.so
へ .ただし、コードが壊れたり、テレビ ディナーを食べたりしないという保証はありません。