回答:
libc.soUbuntu 11.04 でのmultiarch作業の一部として移動されました。シンボリックリンクが存在できない理由は、multiarchの目的は、i386との両方のamd64バージョンをlibc同時にインストールできるようにすることであるため、64ビットシステムで32ビットバイナリをより簡単に実行でき、その逆(および他の同様の状況)。libc6パッケージに新しい場所へのシンボリックリンクが含まれていた場合、異なるアーキテクチャのそのパッケージのバージョンは両方とも同時にインストールできず(シンボリックリンクのどのバージョンをdpkg選択しますか?)、演習全体を無効にします。
パスをハードコーディングするものlibc.soはすべて、Ubuntu 11.04以降で適切に動作するように更新する必要があります。あなたが話しているスクリプトがUbuntuの一部である場合、バグを報告してmultiarchタグを追加してください。
/lib/libc.so.6は、32ビットライブラリか64ビットライブラリかについて混乱はありません。
動的ライブラリはカーネルによってロードされ、パスはプログラムにハードコーディングされていません。プログラムには、「libc.so.6が必要です」とだけ書かれています。で定義されたシステムは、ライブラリパスで検索/etc/ld.so.confを含め、/usr/libおよび/libデフォルトで。このファイルには、追加の構成ファイルが含まれています/etc/ld.so.conf.d。
私の64ビットシステムでは、で定義されたパスのためにlibc.so.6見つけることができます:/lib/x86_64-linux-gnu/libc.so.6/etc/ld.so.conf.d/x86_64-linux-gnu.conf
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
プログラムによってロードされているライブラリを調べるには、次のように使用lddしldd /bin/bashます。
linux-vdso.so.1 => (0x00007ffff1dff000)
libncurses.so.5 => /lib/libncurses.so.5 (0x00007f9d8b3b8000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9d8b1b4000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9d8ae1f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9d8b61c000)
シンボリックリンクを配置しても何も壊れません。
検索されるディレクトリのリストを取得するには、次を実行します。
ldconfig -v -N | grep '^/'
-vファイル+ディレクトリのリストを表示し-N、キャッシュ(/etc/ld.so.cache)の再作成を防ぎます。
/usr/local/libが、からシンボリックリンクを作成すればうまく動作し/usr/libます。この動作の原因は何ですか?
ldconfig -v -N | grep '^/'か?