Linux プログラムの実行中に動的ライブラリをロードできない場合の解決策

Linux プログラムの実行中に動的ライブラリをロードできない場合の解決策

Linux でダイナミック ライブラリをロードできません

次のような異常事態が発生した場合

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

動的ライブラリのパスが (/usr/cluster/.share/lib) の場合

解決:

方法1: /etc/ld.so.confファイルへのパスを追加する、vi /etc/ld.so.conf

次のコンテンツを追加します

ld.so.conf.d/*.conf をインクルードする

/usr/cluster/.share/lib

方法 2: ターミナルに次のように入力します: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/cluster/.share/lib

方法3: /etc/profileファイルを変更する

MPI_HOME=/usr/clusterをエクスポートする

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MPI_HOME/.share/lib をエクスポートします。

設定ファイルを有効にするには、ターミナルでsource /etc/profileを実行します。

プログラム実行中に動的ライブラリをロードできない場合の解決策

エラーメッセージは次のとおりです。

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

一般的には 2 つの理由があります。1 つは、共有ライブラリ (lib*.so.* ファイル) がオペレーティング システムに含まれていないか、共有ライブラリのバージョンが正しくないことです。解決策は、再度ダウンロードしてインストールすることです。

もう 1 つの理由は、共有ライブラリがインストールされているが、共有ライブラリを呼び出す必要があるプログラムが実行されたときに、プログラムがデフォルトの共有ライブラリ パスに従って共有ライブラリ ファイルを見つけることができないことです。解決策は次のとおりです。

共有ライブラリ ファイルが /lib または /usr/lib ディレクトリにインストールされている場合は、ldconfig コマンドを実行します。

ldconfig コマンドの目的は、デフォルトの検索ディレクトリ (b および /usrb) およびダイナミック ライブラリ構成ファイル /etc/ld.so.conf にリストされているディレクトリで共有可能なダイナミック リンク ライブラリ (lib*.so* のような形式) を検索し、ダイナミック ローダー (ld.so) に必要な接続ファイルとキャッシュ ファイルを作成することです。キャッシュ ファイルはデフォルトで /etc/ld.so.cache に設定され、ダイナミック リンク ライブラリ名のソートされたリストが格納されます。

共有ライブラリ ファイルが /usr/local/lib (通常、オープン ソースの共有ライブラリはこのディレクトリにインストールされます) または /lib や /usr/lib 以外のディレクトリにインストールされている場合は、ldconfig コマンドを実行する前に、次のように、新しい共有ライブラリ ディレクトリを共有ライブラリ構成ファイル /etc/ld.so.conf に追加する必要があります。

# cat /etc/ld.so.conf
ld.so.conf.d/*.conf をインクルードする
# echo "/usr/local/lib" >> /etc/ld.so.conf
#ldconfig

または、/etc/ld.so.conf.d/ ディレクトリに .conf をサフィックスとして新しいファイルを作成し、ライブラリ ファイルが配置されているディレクトリをそのファイルに追加します。次に、ldconfig を実行して /etc/ld.so.cache ファイルを更新します。

共有ライブラリ ファイルが /lib または /usr/lib 以外のディレクトリにインストールされているが、共有ライブラリ パスを /etc/ld.so.conf ファイルに追加したくない (またはパスを追加する権限がない) 場合。グローバル変数LD_LIBRARY_PATHをエクスポートすると、プログラムを実行するときにディレクトリ内の共有ライブラリが検索されます。

LD_LIBRARY_PATH は、共有ライブラリを検索するディレクトリをローダーに指示することを意味します。コロンで区切って複数の検索ディレクトリを設定できます。たとえば、mysql を /usr/local/mysql ディレクトリにインストールし、/usr/local/mysql/lib の下に多数のライブラリ ファイルがある場合は、次のステートメントを .bashrc または .bash_profile またはシェルに追加できます。

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

一般的に言えば、これは許可がない場合や一時的な必要性がある場合に使用される一時的な解決策にすぎません。

プログラムに必要なライブラリ ファイルが、システムに現在存在するライブラリ ファイルのバージョンよりも低い場合は、リンクを作成できます。例えば:

共有ライブラリの読み込み中にエラーが発生しました: libncurses.so.4: 共有ライブラリを開けません
オブジェクトファイル: そのようなファイルまたはディレクトリはありません
ls /usr/lib/libncu*
/usr/lib/libncurses.a /usr/lib/libncurses.so.5
/usr/lib/libncurses.so /usr/lib/libncurses.so.5.3

libncurses.so.4 はないものの、下位互換性のある libncurses.so.5 があることがわかります。

リンクを作成するだけ

ln -s /usr/lib/libncurses.so.5.3 /usr/lib/libncurses.so.4

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • Linux で Scala 環境を構築し、簡単な Scala プログラムを書く
  • よくある Linux 英語エラーの中国語翻訳 (初心者必見)
  • Linux コマンド クエリ アプレットでの WePY クラウド開発の実践
  • CD コマンドを使わずに Linux でディレクトリ/フォルダに入る方法
  • リモート Linux システムでポートが開いているかどうかを確認する 3 つの方法
  • 詳細なLinuxインストールチュートリアル
  • Linux でソースコード パッケージから Swoole をインストールするための詳細な手順と基本的な使用方法
  • Linux での chmod コマンドの使用方法の詳細な説明
  • Linux で Tomcat を実行するいくつかの方法の説明
  • Hadoop を使用せずに Linux 環境に Spark のスタンドアロン バージョンをインストールする方法

<<:  MySQLのレプリケーションの詳細な分析

>>:  フローティングメニューを実装するjQueryプラグイン

推薦する

VMware仮想マシンにLinux(CentOS)をインストールするための詳細な構成手順

CentOS7をダウンロード私がダウンロードしたイメージはCentOS-7-x86_64-DVD-1...

MySQL メモリテーブルと一時テーブルの使用方法の詳細な説明

MySQL メモリ テーブルと一時テーブルの使用メモリテーブル: セッション 1 $ mysql -...

Rx レスポンシブプログラミングについての簡単な説明

目次1. 観察可能2. 高階関数3. エクスプレスボックスモデル3.1. エクスプレスボックスモデル...

ノード スキャフォールディングを使用してトークン検証を実装するサーバーを構築する方法

コンテンツスキャフォールディングを使用してノードプロジェクトを素早く構築するデータベースとやり取りす...

React Router で履歴リダイレクトを使用する方法

react-routerでは、コンポーネント内のジャンプは<Link>で使用できます。し...

プロジェクトにおける CSS グリッドシステムの柔軟な使用方法の詳細な説明

序文CSS グリッドは通常、さまざまなフレームワークにバンドルされていますが、実際のビジネス ニーズ...

JS を使って CSS3 で丸い角を実装する方法

IE で CSS3 を使用して角を丸くする方法を探していたときに、例を見つけました。まだテストして...

JS 9 Promise 面接の質問

目次1. 複数の .catch 2. 複数の .catch 3. .then と .catch の連...

Vue3 非同期データ読み込みコンポーネントサスペンスの使い方

目次序文コンポーネントの作成要約する序文Vue3 には多くの注目すべき機能が追加されましたが、サスペ...

Matlab による JavaScript プログラミング、重心アルゴリズムによる位置決め学習

目次Matlab セントロイドアルゴリズムMatlab はクローズドな商用ソフトウェアであり、米国政...

Dockerを使用してMQTTサーバーを構築するプロセスの詳細な説明

1. イメージをプルするdocker pull registry.cn-hangzhou.aliyu...

MySQL で重複時間を削除して時間差を計算する実装

目次必要:ドライブ:アイデア:成し遂げる:個人的には、実際の開発ではストアド プロシージャの使用はお...

MySQLの起動と接続方法の例分析

目次mysqldの起動方法方法 1: mysqld方法 2: mysqld_safe方法3: mys...

vuexプロジェクトにおけるログインステータス管理の実践プロセス

目次道具:ログインシナリオ:練習する:シナリオ1: 思考と実践シナリオ2: 思考と実践要約する道具:...

Linuxで新しいユーザーを作成し、指定されたディレクトリへの権限を付与する

1 ユーザーを作成し、ユーザーのルートパスとパスワードを指定します useradd -d /home...