質問

によりGentooを使用して、多くの場合、更新プログラムの後にライブラリの古いバージョンにリンクされていることを起こります。通常、あるrevdep-再構築はそれを解決するのに役立ちますが、今回はそれがPythonライブラリの依存だし、python-updaterはそれを拾うことはありません。

共有ライブラリがどの別の共有ライブラリに依存ものを私に示してlddの「階層」変種はありますか?タイムライブラリと実行可能ファイルのほとんどは、大きなリストにライブラリの依存関係を回し、唯一の順番に一握りにリンクされた他の共有ライブラリ、一握りのに対してリンクされています。私は私がアップグレードされた別のライブラリの新しいバージョンで再構築するために持っている依存関係を知りたい。

役に立ちましたか?

解決

あなたはFEATURES=preserve-libsでPortage≥2.2を実行している場合は、古いrevdep-rebuildversが保存されるように、必要に応じて

、あなたは今まで(もう.so.必要はありませめったに必要がありますが、まだものはまだKABOOMが行くようlibA.so.0libC.so.0を望んでいるとlibB.so.0libC.so.1を希望する場合、慎重に再構築する必要があるもののそして、いくつかのバイナリがlibA.so.0libB.so.0)の両方を望んでます。

<時間>

言われていることは、何lddそれは通常と同じように実行可能ファイルまたはライブラリをロード行うには、動的リンカを得るが、道に沿っていくつかの情報をプリントアウトすることです。それは、ダイナミックリンカが何をするかですので、これは、検索再帰的「ライブラリは他のライブラリ&hellipを必要とするバイナリニーズ」です。

私は現在のLinux / PPC32を実行していますよ。 Linux / x86で、ダイナミックリンカは通常/lib/ld-linux.so.2あり、およびLinux / x86_64の上、動的リンカは通常/lib/ld-linux-x86-64.so.2です。ここでは、私が直接、ちょうどすべてlddはその魔法を実行するために、ダイナミックリンカに呼びかけシェルスクリプト以外の何ものでもありませんポイントにハンマーにそれを呼び出します。

$ /lib/ld.so.1 /sbin/badblocks
Usage: /sbin/badblocks [-b block_size] [-i input_file] [-o output_file] [-svwnf]
       [-c blocks_at_once] [-d delay_factor_between_reads] [-e max_bad_blocks]
       [-p num_passes] [-t test_pattern [-t test_pattern [...]]]
       device [last_block [first_block]]
$ LD_TRACE_LOADED_OBJECTS=1 /lib/ld.so.1 /sbin/badblocks
        linux-vdso32.so.1 =>  (0x00100000)
        libext2fs.so.2 => /lib/libext2fs.so.2 (0x0ffa8000)
        libcom_err.so.2 => /lib/libcom_err.so.2 (0x0ff84000)
        libc.so.6 => /lib/libc.so.6 (0x0fdfa000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x0fdc0000)
        /lib/ld.so.1 (0x48000000)
$ LD_TRACE_LOADED_OBJECTS=1 /lib/ld.so.1 /lib/libcom_err.so.2
        linux-vdso32.so.1 =>  (0x00100000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x6ffa2000)
        libc.so.6 => /lib/libc.so.6 (0x6fe18000)
        /lib/ld.so.1 (0x203ba000)
$ grep -l pthread /sbin/badblocks /lib/libcom_err.so.2
/lib/libcom_err.so.2

/sbin/badblocksは、ライブラリの依存関係としてlibpthread.so.0は表示されませんが、それはlibcom_err.so.2で引き込まれます。

lddあなたの問題は、出力は、見栄えの良い依存関係ツリーはありませんか? ldd -vを使用します。

$ LD_TRACE_LOADED_OBJECTS=1 LD_VERBOSE=1 /lib/ld.so.1 /sbin/badblocks
        linux-vdso32.so.1 =>  (0x00100000)
        libext2fs.so.2 => /lib/libext2fs.so.2 (0x0ffa8000)
        libcom_err.so.2 => /lib/libcom_err.so.2 (0x0ff84000)
        libc.so.6 => /lib/libc.so.6 (0x0fdfa000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x0fdc0000)
        /lib/ld.so.1 (0x201f9000)

        Version information:
        /sbin/badblocks:
                libc.so.6 (GLIBC_2.2) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.1) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.0) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/libc.so.6
        /lib/libext2fs.so.2:
                libc.so.6 (GLIBC_2.1.3) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.3) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.2) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.1) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.0) => /lib/libc.so.6
        /lib/libcom_err.so.2:
                ld.so.1 (GLIBC_2.3) => /lib/ld.so.1
                libpthread.so.0 (GLIBC_2.1) => /lib/libpthread.so.0
                libpthread.so.0 (GLIBC_2.0) => /lib/libpthread.so.0
                libc.so.6 (GLIBC_2.1.3) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.1) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.0) => /lib/libc.so.6
        /lib/libc.so.6:
                ld.so.1 (GLIBC_PRIVATE) => /lib/ld.so.1
                ld.so.1 (GLIBC_2.3) => /lib/ld.so.1
        /lib/libpthread.so.0:
                ld.so.1 (GLIBC_2.3) => /lib/ld.so.1
                ld.so.1 (GLIBC_2.1) => /lib/ld.so.1
                ld.so.1 (GLIBC_PRIVATE) => /lib/ld.so.1
                libc.so.6 (GLIBC_2.1.3) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.1) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.3.2) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.2) => /lib/libc.so.6
                libc.so.6 (GLIBC_PRIVATE) => /lib/libc.so.6
                libc.so.6 (GLIBC_2.0) => /lib/libc.so.6
<時間> あなたがしたい場合は、

は、ELFヘッダを読み、直接の代わりに、動的リンカに依存することができます。

$ readelf -d /sbin/badblocks | grep NEEDED
 0x00000001 (NEEDED)                     Shared library: [libext2fs.so.2]
 0x00000001 (NEEDED)                     Shared library: [libcom_err.so.2]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
$ readelf -d /lib/libcom_err.so.2 | grep NEEDED
 0x00000001 (NEEDED)                     Shared library: [libpthread.so.0]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
 0x00000001 (NEEDED)                     Shared library: [ld.so.1]

また、 man ld.so の他のかわいいトリックのためにあなたはglibcのダイナミックで遊ぶことができますすることができますリンカます。

他のヒント

私は多くの興味深い詳細を参照してくださいが、質問には直接答え尋ねます。

lddの '階層' バージョンは、(lddtreeから)app-misc/pax-utilsある

$ lddtree /usr/bin/xmllint 
xmllint => /usr/bin/xmllint (interpreter => /lib64/ld-linux-x86-64.so.2)
    libreadline.so.6 => /lib64/libreadline.so.6
        libncurses.so.5 => /lib64/libncurses.so.5
            libdl.so.2 => /lib64/libdl.so.2
    libxml2.so.2 => /usr/lib64/libxml2.so.2
        libicui18n.so.49 => /usr/lib64/libicui18n.so.49
            libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.1/32/libstdc++.so.6
                ld-linux.so.2 => /lib64/ld-linux.so.2
            libgcc_s.so.1 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.7.1/32/libgcc_s.so.1
        libicuuc.so.49 => /usr/lib64/libicuuc.so.49
        libicudata.so.49 => /usr/lib64/libicudata.so.49
        libz.so.1 => /lib64/libz.so.1
        liblzma.so.5 => /usr/lib64/liblzma.so.5
        libm.so.6 => /lib64/libm.so.6
    libpthread.so.0 => /lib64/libpthread.so.0
    libc.so.6 => /lib64/libc.so.6

私はこのようなものを必要なので、私はここでは、独自のライブラリの依存関係を示している、 tldd を書きました:

$ ./tldd ./tldd
./tldd
└─libstdc++.so.6 => /lib64/libstdc++.so.6 (0x0000003687c00000)
  ├─libm.so.6 => /lib64/libm.so.6 (0x0000003685000000)
  │ └─libc.so.6 => /lib64/libc.so.6 (0x0000003684c00000)
  │   └─ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x0000003684400000)
  └─libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003686c00000)
「 - WLと、 - 必要に応じて、」あなたがまだない場合は、

私はまた、「readelfが-d」提案だけでなく、あなたがLDFLAGS =を構築することを確認するつもりでした。これは、あまり頻繁にこの問題を打つようになります。ポーテージ2.2の保存-libsのはいいですが、私はそれはそれのために主にマスクされた収集 - それは欠点を持っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top