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

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

Ubuntuでよく見かける一般的なエラーのリストがあります。 問題があります マージ リストの場合、BADSIG エラーがあります そして多くの一般的なUbuntuアップデートエラー。

ソースコードからプログラムをインストールするときによく見られるこのような一般的なエラーの1つは、 エラー 共有ライブラリの読み込み中 。完全なエラーは通常、次のようになります。

共有ライブラリの読み込み中にエラーが発生しました:
共有オブジェクトファイルを開くことができません:そのようなファイルまたはディレクトリはありません

たとえば、FreeRADIUSサーバーを使用しようとしましたが、次のエラーが表示されました:

radiusd: error while loading shared libraries:
libfreeradius-radius-2.1.10.so:
cannot open shared object file: No such file or directory

このエラーの背後にある理由は、プログラムのライブラリがダイナミックリンカが見つけられない場所にインストールされているためです。

この問題を修正する方法をお見せしましょう。

修正 「共有オブジェクトファイルを開くことができません:そのようなファイルまたはディレクトリはありません」というエラー

この「共有ライブラリのロード中のエラー」を自動的に修正する簡単な方法の1つは、ldconfigを使用することです。

ターミナルを開き(Ctrl + Alt + T)、次のコマンドを入力するだけです。

sudo /sbin/ldconfig -v

ほとんどの場合、この1つのライナーで問題を解決できます。ただし、そうでない場合は、このエラーを処理する別の方法について説明しました。しかしその前に、上記のコマンドが何をするのかをお話ししましょう。

共有オブジェクトファイルとは何ですか?上記のコマンドはどのように問題を修正しますか?

ご覧のとおり、C / C ++では、.so(共有オブジェクト)はコンパイルされたライブラリファイルです。このライブラリファイルは複数のプログラムで共有できるため、共有オブジェクトと呼ばれます。これらの生成されたライブラリは通常、/libまたは/usr/libディレクトリにあります。

この小さなコマンドでこの問題がどのように修正されたのか疑問に思われる場合は、のマニュアルページをお読みください。 ldconfig つまり:

ldconfig ファイル/etc/ld.so.confのコマンドラインで指定されたディレクトリにある最新の共有ライブラリへの必要なリンクとキャッシュを作成します 、および信頼できるディレクトリ( / lib および/usr / lib )。キャッシュは、ランタイムリンカー ld.soによって使用されます またはld-linux.so ldconfig リンクを更新する必要があるバージョンを決定するときに、検出したライブラリのヘッダーとファイル名を確認します。

このクイックフィックスが、共有ライブラリメッセージの読み込み中の厄介なエラーの排除に役立つことを願っています Ubuntuおよびその他のLinuxで。

そうでない場合は、調査を行って、次のセクションで説明する方法で問題の修正を試みることができます。

「共有オブジェクトファイルを開けません」エラーを修正する別の方法

問題のライブラリがシステムで使用可能な場合、上記の方法で問題が修正されます。ただし、常にそうであるとは限りません。

システムにプログラムがインストールされていない場合、そのライブラリファイルはありません。そもそもライブラリファイルがない場合、ldconfigは何もできません。

したがって、別の方法は、必要なプログラムをインストールすることであり、ライブラリを自動的に作成する必要があります。

例を挙げてお見せしましょう。このエラーが表示されたとしましょう:

error while loading shared libraries: libgobject-2.0.so.0: cannot open shared object file: No such file or directory

問題はlibgobjectバージョン2.0にあります。一部のプログラムはライブラリの特定のバージョンに依存しており、見つからない場合はそれについて不平を言うため、バージョン番号は重要です。

現在、aptは、パッケージを検索し、インストールする前にそのバージョンを知るために使用できる検索オプションを提供します。

[email protected]:~$ apt search libgobject
Sorting... Done
Full Text Search... Done
librust-gobject-sys-dev/focal 0.9.0-2 amd64
  FFI bindings to libgobject-2.0 - Rust source code

さて、このlibrust-gobject-sys-devパッケージは、Rustプログラムを実行しようとしていることがわかっている場合に必要なものになる可能性があります。しかし、それについて不平を言ったのが実行中のPythonプログラムだったとしたらどうでしょうか?

検索中にパッケージ名からlibを削除することで、検索範囲を広げることができます。 libはライブラリを意味し、ライブラリはgobject-xyzという名前の汎用パッケージによって提供される場合があります。

より簡潔な結果を得るには、(説明ではなく)パッケージの名前で文字列を検索することをお勧めします。

[email protected]:~$ apt search --names-only gobject
Sorting... Done
Full Text Search... Done
gobject-introspection/focal-updates 1.64.1-1~ubuntu20.04.1 amd64
  Generate interface introspection data for GObject libraries

libavahi-gobject-dev/focal 0.7-4ubuntu7 amd64
  Development headers for the Avahi GObject library

libavahi-gobject0/focal 0.7-4ubuntu7 amd64
  Avahi GObject library

libcairo-gobject-perl/focal,now 1.005-2 amd64 [installed,automatic]
  integrate Cairo into the Glib type system in Perl

libcairo-gobject2/focal,now 1.16.0-4ubuntu1 amd64 [installed,automatic]
  Cairo 2D vector graphics library (GObject library)

libghc-gi-gobject-dev/focal 2.0.19-1build1 amd64
  GObject bindings

libghc-gi-gobject-doc/focal,focal 2.0.19-1build1 all
  GObject bindings; documentation

上記の切り捨てられた出力では、パッケージが実行しようとした元のプログラムに関連しているかどうかを確認する必要があります。提供されているライブラリのバージョンも確認する必要があります。

正しいパッケージを特定したら、次のようにインストールします。

sudo apt install package_name

インストールしたら、ldconfigコマンドを再度実行して、キャッシュを更新できます。

sudo /sbin/ldconfig -v

この方法はあなたの側でいくらかの努力を必要としますが、これは依存関係が処理される方法です。

何も機能しません、今は何ですか?

残念ながら、上記の方法ではうまくいかない場合があります。何ができますか?

まず、共有ライブラリが他のパッケージから使用される場合があることに注意してください。 XYZプログラムを実行しようとしていて、ABCプログラムが正しいバージョンの共有ライブラリをインストールする場合は、機能する場合と機能しない場合があります。あなたはそれにヒットとトライアルを与えることができます。

次に、古すぎるプログラムや新しすぎるプログラムを実行しようとすると、Linuxディストリビューションで使用できないライブラリバージョンが必要になる場合があります。

あなたがするかもしれないことはあなたがプログラムの他のバージョンを使うことができるかどうかチェックすることです。たとえば、バージョン4の代わりにEclipseバージョン3を使用します。これはあなたのケースに役立つかもしれません。

もう1つの方法は、開発者のWebサイトまたはフォーラムをチェックして、ソースコードから正しいバージョンのライブラリを手動でインストールできるかどうかを確認することです。それには(2020年に)多くの努力が必要ですが、選択肢はあまりありません。

それはあなたのために働きましたか?

私はあなたのために物事をもう少し明確にしたいと思います。システム内の共有ライブラリの問題を修正できましたか?ご質問、ご提案がございましたら、お気軽にコメントをお寄せください。チャオ:)



Ubuntu
  1. UbuntuのKateエディターでファイルを開くようにxdebugエラーメッセージを設定する方法

  2. Rpm:共有ライブラリのロード中にエラーが発生しました:Libz.so.1:共有オブジェクト ファイルを開けません:そのようなファイルはありません

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

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

  2. libstdc++.so.5:共有オブジェクト ファイルを開けません - ただし、ライブラリはインストールされており、最新です

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

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

  2. Ubuntu – Linuxで.bakファイルを開く方法は?

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