web-dev-qa-db-ja.com

同じバイナリが、64ビットのRHEL 5.4サーバーにlinux-vdso.so.1を必要とし、別のサーバーには必要としないのはなぜですか?

Cleanfilegと呼ばれるファイル解析プログラムを実行している顧客がいて、最後の更新時点で、aファイルを解析するときに日付形式のエラーが発生します。

奇妙なのは、RHEL64(5.4)の同じリリースでgcc、pthread、libcなどの同じビルドで同じプログラムで同じファイルを実行していて、彼の問題を再現できないことです。彼は先月のバージョンのcleanfilegにロールバックでき、すべてが正常に機能するので、ソースを1行ずつ確認すると答えが見つかるかもしれませんが、気まぐれなのは、気まぐれなことです。実行可能ファイルでlddを実行して、共有オブジェクトのいくつかの異なるバージョンを取得しているかどうかを確認するように依頼しました。

彼の

# ldd cleanfileg
linux-vdso.so.1 =>  (0x00002ad4c98d1000)
libmdGeo.so => /tools/clean_address/bin/libmdGeo.so (0x00002ad4c98d6000)
libmdName.so => /tools/clean_address/bin/libmdName.so (0x00002ad4c9a70000)
libmdPhone.so => /tools/clean_address/bin/libmdPhone.so (0x00002ad4c9df1000)
libmdAddr.so => /tools/clean_address/bin/libmdAddr.so (0x00002ad4ca28c000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x0000003833600000)
libAddressDoctor5.so => /tools/clean_address/bin/libAddressDoctor5.so (0x00002ad4ca96d000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003831600000)
libm.so.6 => /lib64/libm.so.6 (0x000000382b200000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003830a00000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x000000382ba00000)
libc.so.6 => /lib64/libc.so.6 (0x000000382ae00000)
librt.so.1 => /lib64/librt.so.1 (0x000000382d200000)
/lib64/ld-linux-x86-64.so.2 (0x000000382aa00000)

-私の

#ldd cleanfileg
libmdGeo.so (0x00002ab5d3342000)
libmdName.so (0x00002ab5d34cf000)
libmdPhone.so (0x00002ab5d3850000)
libmdAddr.so (0x00002ab5d3ceb000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00000034bde00000)
libAddressDoctor5.so (0x00002ab5d43bf000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000034c9000000)
libm.so.6 => /lib64/libm.so.6 (0x00000034b6200000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000034c7c00000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00000034b6a00000)
libc.so.6 => /lib64/libc.so.6 (0x00000034b5e00000)
librt.so.1 => /lib64/librt.so.1 (0x00000034b6e00000)
/lib64/ld-linux-x86-64.so.2 (0x00000034b5a00000)

Linux-vdso.so.1は、なんとかして構成によって要求される必要がある(またはない)ものですか?他の賢明なマシンが同じコードを実行しているように見えるのに、どのように/なぜそれが必要ですか?

デバッグのために誰かが提案できる次のステップはありますか?

10
Scott Mcgrath

Linux-vdso.so.1は、なんとかして構成によって要求される必要がある(またはない)ものですか?

linux-vdso.so.1は、カーネルによってすべてのプロセスに注入される「ライブラリ」です。詳しくは こちら をご覧ください。

カーネルのバージョンが異なる可能性があります。これは、異なるldd出力が表示される理由を説明しています。

20

ld.confファイルを比較します。違いはありますか?

0
David Thornton