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

推薦する

Tomcat 経由で JMX 監視を有効にする方法

シミュレーション環境を構築する:オペレーティングシステム: centos7メモリ: 1G 1.8.0...

Django が uwsgi+nginx プロキシで静的リソースにアクセスできない問題の解決方法

uwsgi+nginx プロキシ Django をデプロイする場合、uwsgi を使用したアクセスは...

HTML およびプラグイン アプリケーションにおけるデータ カスタム属性の使用の概要

HTML にはデータ属性が含まれていることがよくあります。これらは HTML5 のカスタム属性です。...

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

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

Virtualbox で Ubuntu 16.04 の起動時に共有ディレクトリを自動的にマウントする最良の方法

仮想マシンを使用する人は通常、操作と使用を容易にするために仮想マシン用の共有ディレクトリを設定します...

画像ファイルの形式とその選択方法

1. どの 3 つの形式ですか?それぞれ、gif、jpg、png です。画像ファイルを最適化すること...

IE6、IE7、IE8 で CSS3 の丸い角と影のスタイルをサポートする

CSS3 の角丸や影の効果を使ったページを作りたいのですが、IE ブラウザでは対応していません。こ...

マーキー要素は、スクロールするフォントや画像などの効果を実装します。

マーキー要素を使用すると、単純なフォント(画像など)のスライドやその他の効果を実現できます。コードを...

イベントバブリング、イベントキャプチャ、イベント委任に基づく詳細な説明

イベントバブリング、イベントキャプチャ、イベント委任JavaScript では、イベント委譲は非常に...

mysql サブクエリと結合テーブルの詳細

目次1. サブクエリとは何ですか? 2. 自己結合3. 自然な結合4. 外部接続1. サブクエリとは...

Vue は検証コードのカウントダウンボタンを実装します

この記事では、検証コードカウントダウンボタンを実装するためのVueの具体的なコードを例として紹介しま...

ファイルをアップロードするための HTML フォームの「参照」ボタンを変更する方法

コードをコピーコードは次のとおりです。 <!DOCTYPE HTML PUBLIC "...

MySqlデータベースをバックアップするいくつかの方法

mysqldump ツールのバックアップデータベース全体をバックアップする $> mysqld...

Docker-compose を使用して ELK をデプロイするためのサンプル コード

環境ホストIP 192.168.0.9 Docker バージョン 19.03.2 docker-co...

Linux での VMWare15.5 のインストールに関するチュートリアル

Linux に VMWare をインストールするには、公式 Web サイト https://www....