GNU/Linux >> Linux の 問題 >  >> Linux

共有ライブラリの読み込み中の Linux エラー:共有オブジェクト ファイルを開けません:そのようなファイルまたはディレクトリはありません

ライブラリは動的ライブラリです。オペレーティング システムに、実行時にライブラリの場所を知らせる必要があります。

そのためには、次の簡単な手順を実行する必要があります:

(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 へ .ただし、コードが壊れたり、テレビ ディナーを食べたりしないという保証はありません。


Linux
  1. UbuntuベースのLinuxディストリビューションで「共有オブジェクトファイルを開けない」エラーを解決する方法

  2. rpm:共有ライブラリのロード中にエラーが発生しました:ELF ヘッダーが無効です

  3. cp:ディレクトリの省略 – Linux でディレクトリをコピー中にエラーが発生しました

  1. 「共有ライブラリの読み込み中にエラーが発生しました:libjli.so:共有オブジェクト ファイルを開けません:そのようなファイルまたはディレクトリはありません」起動時の「java -version」エラー

  2. libaio.so.1:共有オブジェクト ファイルを開けません

  3. libpulse.so.0:共有オブジェクト ファイルを開けません:そのようなファイルまたはディレクトリはありません

  1. ImportError:libtk8.6.so:共有オブジェクト ファイルを開けません:そのようなファイルまたはディレクトリはありません

  2. conda.exe:共有ライブラリの読み込み中にエラーが発生しました:libz.so.1

  3. Linux での I/O エラー:root としてディレクトリを削除できません