質問
によりGentooを使用して、多くの場合、更新プログラムの後にライブラリの古いバージョンにリンクされていることを起こります。通常、あるrevdep-再構築はそれを解決するのに役立ちますが、今回はそれがPythonライブラリの依存だし、python-updater
はそれを拾うことはありません。
共有ライブラリがどの別の共有ライブラリに依存ものを私に示してldd
の「階層」変種はありますか?タイムライブラリと実行可能ファイルのほとんどは、大きなリストにライブラリの依存関係を回し、唯一の順番に一握りにリンクされた他の共有ライブラリ、一握りのに対してリンクされています。私は私がアップグレードされた別のライブラリの新しいバージョンで再構築するために持っている依存関係を知りたい。
解決
FEATURES=preserve-libs
でPortage≥2.2を実行している場合は、古いrevdep-rebuild
versが保存されるように、必要に応じて、あなたは今まで(もう.so.
必要はありませめったに必要がありますが、まだものはまだKABOOMが行くようlibA.so.0
がlibC.so.0
を望んでいるとlibB.so.0
はlibC.so.1
を希望する場合、慎重に再構築する必要があるもののそして、いくつかのバイナリがlibA.so.0
とlibB.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)
私はまた、「readelfが-d」提案だけでなく、あなたがLDFLAGS =を構築することを確認するつもりでした。これは、あまり頻繁にこの問題を打つようになります。ポーテージ2.2の保存-libsのはいいですが、私はそれはそれのために主にマスクされた収集 - それは欠点を持っています。
。