私のクライアントは、開発者にLinuxサーバーで実行する小さなc ++コマンドラインアプリを作成してもらいました。サーバーの1つ(Fedora 11を実行している)で、アプリを実行すると、次のエラーが発生します。
error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory
明らかに私が最初にしたことは
yum install libstdc++
しかし、私は得る
Package libstdc++-4.4.1-2.fc11.x86_64 already installed and latest version
したがって、ライブラリはすでに存在し、最新です。通常、私にとってこれらのエラーはライブラリがないことを示しています。では、次にどこを見ればよいのでしょうか。
libstdc++-4.4.1-2.fc11.x86_64
はlibstdc++.so.6
をインストールします。 compat-libstdc++-33-3.2.3-66.x86_64
を取得するには、libstdc++.so.5
パッケージが必要です。 (シンボリックリンクしないでください!libstdc++.so.5
とlibstdc++.so.6
は互換性がありません。)
したがって、rpmは、共有ライブラリ名とそれらを提供するものについて認識しています。そう
yum install'libstdc ++。so.5 '
リポジトリに必要なものがあれば、それをインストールします。
あなたの場合、実行しようとしているバイナリが明らかに32ビットであるため、compat-libstdc ++-33-3.2.3-66.i586.rpmとその32ビットdepsがまだない場合は、それらをフェッチします。
yum install compat-libstdc ++-33は私のためにこれを解決しました。
libstdc ++。so.5は、標準c ++ライブラリの非常に古いバージョンです。
yum search libstdc++
、compat-libstdc ++パッケージの1つをインストールする必要があります。
Cafとaaronが述べたように、同様のエラーが発生したときにyum install compat-libstdc++-33 libstdc++.so.5 -y
を実行するとうまくいきました。
私が遭遇した唯一の問題は、正しいリポジトリがチェックアウトされていなかったため、ファイルにアクセスするためにyum-config-manager --enable rhel-7-server-optional-rpms
を実行する必要があったことです。 RedHat 7以外のものを使用している場合は、正しいリポジトリを検索する必要があります。
最初にyum provides libstdc++.so.5
を実行することで、正しいリポジトリがあるかどうかをいつでも確認できます。
redHat 7でも私のために働いた:エラーは:
共有ライブラリのロード中にエラーが発生しました:libstdc ++。so.5:間違ったELFクラス:ELFCLASS32
解決策は:yum install compat-libstdc++-33 libstdc++.so.5 -y
パッケージがlibstdc ++。so.5をインストールし、他のバージョンはインストールしないことを確認しましたか?それが最も可能性の高い問題です。