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

推薦する

js 加算、減算、乗算、除算の正確な計算方法のサンプルコード

序文コンピュータの数値は浮動小数点であるため、計算プロセス中に取得されるデータは通常正確ではなく、そ...

Linux で tcpdump コマンドを使用してデータ パケットをキャプチャおよび分析する方法の詳細な説明

序文tcpdump はよく知られたコマンドライン パケット分析ツールです。 tcpdump コマンド...

MySQLデータベースに中国語の文字を保存するときに発生するエラーを解決する方法を教えます

目次1. 遭遇した問題2. 問題を分析する3. 本当の問題4. 解決策5. ソリューション効果1. ...

Dockerイメージ内のnoneイメージ操作を削除する

普段はdocker buildコマンドでイメージを生成していますが、コードの更新が頻繁に行われるとn...

IE のテキストモード! DOCTYPE の役割の紹介

前の記事で説明したフォームの自動入力の問題を解決した後、新しい問題が発生しました。ページの一部のスタ...

vue-cropper を使用して vue で写真をトリミングする方法をご存知ですか?

目次1. インストール: 2. 使用方法: 3. 組み込みメソッド: 4. 使用方法:要約する公式サ...

自動ウェブページ更新と自動ジャンプのサンプルコード

ウェブページの自動更新: <head></head> の間に次のコードを追加...

MYSQL パフォーマンス アナライザー EXPLAIN 使用例分析

この記事では、例を使用して MYSQL パフォーマンス アナライザー EXPLAIN の使用方法を説...

HTML内のフレームセットタグが正常に表示されない原因の解析と解決方法

<frameset></frameset>は皆さんもよくご存知のものです。こ...

CentOS 7 で NFS ファイル共有ストレージ サービスを構築するための完全な手順

序文NFS (Network File System) は、ネットワーク ファイル システムを意味し...

更新とデータ整合性処理のためのMySQLトランザクション選択の説明

MySQL のトランザクションはデフォルトで自動的にコミットされます (autocommit = 1...

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

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

CentOS 7 でゲートウェイを変更して IP を設定する方法の例

Centos7 バージョンをインストールするときに、外部ネットワークへの接続を選択すると、外部ネット...

MySQL 8.0.11 圧縮版のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0圧縮パッケージのインストール方法、詳細は次のとおりです知らせ:オペレーティング シ...

CSSは固定比率のブロックレベルコンテナを簡単に実装できる

H5 レイアウトを設計する場合、通常はバナーに遭遇することになります。例えば、2:1 で表示したい場...