ATLAS
Dockerイメージに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.so
sonameです/usr/local/lib/libtatlas.so
。ldconfig
同じディレクトリにある対応する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にバージョンを付けたいのですが、コンテナではこれは重要ではないかもしれません。とにかく、アップグレードのためにコンテナを再構築する必要があります。