回答:
libc.so
Ubuntu 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 '^/'
か?