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プラグイン

推薦する

ウェブページを作るときに知っておくべきいくつかのスキル

1. IE6 では z-index が無効です。 CSS では、階層を変更するために z-index...

MySQL の挿入およびバッチ ステートメントのいくつかの例の詳細な説明

目次序文1.無視を挿入2. 重複キーの更新時3. を置き換える4.存在しない場合は挿入する5. デー...

Docker 経由で wsl の tar ファイルを作成する方法

最近VScodeのリモート開発機能をいじっています。Dockerのコンテナに接続できるほか、WSLに...

Bootstrap3.0 学習ノートテーブル関連

この記事では、Webサイトを作ったことがある人にとっては馴染みのあるテーブルについて主に説明します。...

MySQLのスローログの開き方と保存形式の詳細な分析

開発プロジェクトでは、MySQL のスロークエリログを通じて効率の問題のある SQL を監視できます...

vmware14Pro で Ubuntu システム インターフェイスが小さすぎる問題の解決方法の詳細な説明

1. 動作環境vmware14proウブントゥ 16.04LTS 2. 問題の説明vmware14P...

HTMLフォームタグチュートリアル(1):

フォームは、動的な Web ページを実装するための主要な外部フォームです。フォームとフォーム フィー...

vitrualBox+ubuntu16.04 python3.6 最新チュートリアルと詳細な手順のインストール

最近ディープラーニングを学ぶためにUbuntu+Python 3.6バージョンを使う必要があるため、...

JavaScript における一般的な配列操作

目次1. 連結() 2. 結合() 3. プッシュ() 5. シフト() 6. シフト解除() 7....

ES5とES6の違いを分析する

目次概要関数シグネチャオプションパラメータ非厳密モード例外処理実用要約する概要ご存知のとおり、ES6...

Jenkins統合Dockerプラグインの問題を解決するいくつかの方法

目次背景質問1エラー 2エラー 3エラー4要約する背景テスト環境では、docker プラグインを統合...

HTML にオーディオファイルを挿入してブラウザで再生する場合の互換性の問題

HTML にオーディオ ファイルを挿入した後 (mp3 ファイルを再生した後) に発生したいくつかの...

React Native JSIはRNとネイティブ通信のサンプルコードを実装します

目次JSIとはJSIの違いiOS で JSI を使用するiOS 設定RN側の構成jsはパラメータ付き...

Linuxで権限が拒否された場合の解決策の詳細な説明

許可が拒否されました:その理由は、ファイルの読み取り、書き込み、作成、削除などの権限がないためです。...

MySQL レプリケーション メカニズムの原理の説明

背景レプリケーションはデータの完全なコピーです。レプリケーションが必要な理由として、まず思い浮かぶの...