我有一个客户正在运行名为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是否需要(或不是)由配置决定的东西?如何/为什么其他智能似乎是相同的机器运行相同的代码?
任何人都可以建议进行调试的后续步骤吗?
答案 0 :(得分:20)
linux-vdso.so.1是否需要(或不是)由配置决定的东西?
linux-vdso.so.1
是一个"库"由内核注入每个进程。阅读更多相关信息here。
您可能有不同的内核版本,这可以解释为什么您会看到不同的ldd
输出。
答案 1 :(得分:0)
比较你的ld.conf文件。有差异吗?