ldconfig は、ユーザーが作成したシンボリックリンクに従わない。

ldconfig は、ユーザーが作成したシンボリックリンクに従わない。

Arch Linux ARMでpacmanを介してインストールされたInkscape 0.48.4-15(armv7)を実行しようとしています。

$ inkscape
inkscape: error while loading shared libraries: libMagick++-6.Q16HDRI.so.3: cannot open shared object file: No such file or directory

予想通り、/usr/lib では共有オブジェクトを使用できません。

$ ll /usr/lib | grep libMagick+
lrwxrwxrwx   1 root root       30 Jun  5 03:04 libMagick++-6.Q16HDRI.so ->     libMagick++-6.Q16HDRI.so.4.0.0
lrwxrwxrwx   1 root root       30 Jun  5 03:04 libMagick++-6.Q16HDRI.so.4 -> libMagick++-6.Q16HDRI.so.4.0.0
-rwxr-xr-x   1 root root   379428 Jun  5 03:06 libMagick++-6.Q16HDRI.so.4.0.0

したがって、*.so.3を*.so.4.0.0にリンクするシンボリックリンクを作成しました。

$ sudo ln -s libMagick++-6.Q16HDRI.so.4.0.0 libMagick++-6.Q16HD.so.3
lrwxrwxrwx   1 root root       30 Jun  5 03:04 libMagick++-6.Q16HDRI.so -> libMagick++-6.Q16HDRI.so.4.0.0
lrwxrwxrwx   1 root root       30 Jun  6 15:15 libMagick++-6.Q16HDRI.so.3 -> libMagick++-6.Q16HDRI.so.4.0.0
lrwxrwxrwx   1 root root       30 Jun  5 03:04 libMagick++-6.Q16HDRI.so.4 -> libMagick++-6.Q16HDRI.so.4.0.0
-rwxr-xr-x   1 root root   379428 Jun  5 03:06 libMagick++-6.Q16HDRI.so.4.0.0

そして、*.so.3が実際に*.so.4.0.0に接続されていることを確認してください。

$ readlink -f libMagick++-6.Q16HDRI.so.3
/usr/lib/libMagick++-6.Q16HDRI.so.4.0.0

これで、動的リンカーのランタイム・バインディングを再構成し、Inkscapeを再実行します。

$ sudo ldconfig 
$ ldd $(which inkscape) | grep libMagick++
libMagick++-6.Q16HDRI.so.3 => /usr/lib/libMagick++-6.Q16HDRI.so.3 (0x75cf9000)

*.so.3以前に生成されたシンボリックリンクに従うのではなく、それ自体でリンクするのはなぜですか?

答え1

Lddはシンボリックリンクに従わない。ライブラリが見つかったパスのみを表示します。 ldd - 診断ツールと診断を妨げるシンボリックリンクに従うかどうか。

関連情報