/lib/libc.so.6が見つからないのはなぜですか?


20
find | grep libc.so.6

にあることが明らかになりました/lib/i386-linux-gnu/libc.so.6が、私が実行していたスクリプトはそれが直接下にあることを期待して/libいたので、少なくともシンボリックリンクがないのはなぜですか?

そこにシンボリックリンクを置くと、何かを壊す危険がありますか?

回答:


22

libc.soUbuntu 11.04 でのmultiarch作業の一部として移動されました。シンボリックリンクが存在できない理由は、multiarchの目的は、i386との両方のamd64バージョンをlibc同時にインストールできるようにすることであるため、64ビットシステムで32ビットバイナリをより簡単に実行でき、その逆(および他の同様の状況)。libc6パッケージに新しい場所へのシンボリックリンクが含まれていた場合、異なるアーキテクチャのそのパッケージのバージョンは両方とも同時にインストールできず(シンボリックリンクのどのバージョンをdpkg選択しますか?)、演習全体を無効にします。

パスをハードコーディングするものlibc.soはすべて、Ubuntu 11.04以降で適切に動作するように更新する必要があります。あなたが話しているスクリプトがUbuntuの一部である場合、バグを報告してmultiarchタグを追加してください。


1
いい答え、今日新しいことを学びました(再び):)
Lekensteyn

1
私が使用しているプロセッサは、64ビット命令もサポートしていません。手動でシンボリックリンクを追加することに関連するリスクはありますか?私がそれをする必要があるかどうかはわかりませんが、そうなら。とにかく、これは正しい答えのようです。ありがとう。
エリックB

@エリックB:何?32ビットプロセッサで64アプリを使用しようとしていると言っていますか?それは間違いなく機能しません。32ビットアプリは64ビットプロセッサで正常に動作しますが、その逆はできません。
-Lekensteyn

@Lekensteynそれは間違いなく私が言っていることではありません。私が言っているのは、64ビットライブラリを使用する必要がないということです。したがって、私の特定のシステムで/lib/libc.so.6は、32ビットライブラリか64ビットライブラリかについて混乱はありません。
エリックB

3
64ビットパッケージを使用する予定がない場合は、シンボリックリンクを追加することに大きなリスクはないと思います。
コリンワトソン

10

動的ライブラリはカーネルによってロードされ、パスはプログラムにハードコーディングされていません。プログラムには、「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

プログラムによってロードされているライブラリを調べるには、次のように使用lddldd /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)の再作成を防ぎます。


シンボリックリンクを配置しても何も壊れませんが、実際には何の効果もありませんよね?
エリックB

@Erik B:どのプログラム/スクリプトを参照していますか?パスがハードコードされているため、スクリプトが混乱することを理解できます。しかし、プログラムはパスを知る必要はありません。
-Lekensteyn

それはどのように機能しますか?プログラムがインストールされているライブラリを見つけることができないという問題があるようです/usr/local/libが、からシンボリックリンクを作成すればうまく動作し/usr/libます。この動作の原因は何ですか?
crazy2be

@ crazy2be:の出力を投稿できますか ldconfig -v -N | grep '^/'か?
レーケンシュタイン

@Lekensteyn:確かに: pastebin.com/dtfnw2Tv。しかし、これは私が使用したほとんどすべてのシステムの一部のプログラムで発生したため、システム構成とは関係ないと考えました。
crazy2be

5

次のように、libc.so.6ファイルにシンボリックリンクを追加するだけです。

sudo ln -s /lib/i386-linux-gnu/libc.so.6 /lib/libc.so.6

同じことは、まだシステムにある他の欠落ファイルにも当てはまります。私の場合、Matlabがファイルを欠落していましたが、問題はなくなりました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.