为什么同一个二进制文件需要在一个64位RHEL 5.4服务器上使用linux-vdso.so.1而不是另一个?

时间:2014-10-08 21:18:53

标签: glibc libstdc++

我有一个客户正在运行名为cleanfileg的文件解析程序,并且在上次更新时,他在解析 文件时收到日期格式错误。

奇怪的是,我们在同一个文件上运行相同的程序,在同一版本的RHEL64(5.4)和我使用相同的gcc,pthread,libc等版本不能复制他的问题。他可以回滚到上个月的cleanfileg版本,一切正常,所以我很确定通过源代码逐行可能会找到答案,但是什么呢?让我感到困惑的是,一时兴起,我让他在他的可执行文件上运行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是否需要(或不是)由配置决定的东西?如何/为什么其他智能似乎是相同的机器运行相同的代码?

任何人都可以建议进行调试的后续步骤吗?

2 个答案:

答案 0 :(得分:20)

  

linux-vdso.so.1是否需要(或不是)由配置决定的东西?

linux-vdso.so.1是一个"库"由内核注入每个进程。阅读更多相关信息here

您可能有不同的内核版本,这可以解释为什么您会看到不同的ldd输出。

答案 1 :(得分:0)

比较你的ld.conf文件。有差异吗?