ldconfigは特定のファイルに接続できません

ldconfigは特定のファイルに接続できません

ATLASDockerイメージにNetlibを使用してインストールしましたが、LAPACK実行するたびにldconfig次のエラーが発生します。

ldconfig: Can't link /usr/local/lib//usr/local/lib/libtatlas.so to libtatlas.so
ldconfig: Can't link /usr/local/lib//usr/local/lib/libsatlas.so to libsatlas.so

もちろん、存在しないがシンボリックリンクではない/usr/local/lib//usr/local/lib/libtatlas.soので、なぜこのファイルを見つけようとするのか混乱しています。libtatlas.so

root@cd00953552ab:/usr/local/lib# ls -la | grep atlas
-rw-r--r-- 1 root staff 15242054 Apr 27 08:18 libatlas.a
-rwxr-xr-x 1 root staff 17590040 Apr 27 08:18 libatlas.so
-rwxr-xr-x 1 root staff 17492184 Apr 27 08:18 libsatlas.so
-rwxr-xr-x 1 root staff 17590040 Apr 27 08:18 libtatlas.so

なぜこれが起こり、これを解決したり、このエラーメッセージをオフにしたりする方法はありますか?

編集:これはReadelf出力です。

root@cd00953552ab:/usr/local/lib# eu-readelf -a /usr/local/lib/libatlas.so | grep SONAME
  SONAME            Library soname: [/usr/local/lib/libtatlas.so]

ベストアンサー1

何らかの理由で、おそらくライブラリの構築方法(より具体的にリンクされている)に関してインストールディレクトリをsonameに保存します。したがって、 libtatlas.sosonameです/usr/local/lib/libtatlas.soldconfig同じディレクトリにある対応するsoname(存在しない場合)にライブラリをリンクしてみてください。ライブラリを探し、対応するsonameを確認し、/usr/local/lib/libtatlas.so(ディレクトリとsoname接続)でリンクを作成する必要があるかどうかを判断し、存在しないため失敗します。/usr/local/lib//usr/local/lib/libtatlas.so/usr/local/lib/libtatlas.so/usr/local/lib/usr/local/lib

この問題を解決する適切な方法は、ライブラリの名前が正しく定義されていることを確認することです。通常、ディレクトリ名などはないと予想します。libtatlas.so.3(バージョンはビルドしているライブラリのABIレベルによって異なります。)ライブラリを再構築するか、正しくビルドされたパッケージを見つける必要があります。

あるいは、編集ライブラリのsonameを使用することもできます。パッチELF:

patchelf --set-soname libtatlas.so /usr/local/lib/libtatlas.so

理想的には、このライブラリで構築されたプログラムを再リンクする必要があります。これにはsonameも含まれています(PatchELFを使用してパッチを適用することもできます)。

進化しているシステムではsonameにバージョンを付けたいのですが、コンテナではこれは重要ではないかもしれません。とにかく、アップグレードのためにコンテナを再構築する必要があります。

おすすめ記事