gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:41:32 26 4
gpt4 key购买 nike

我有一位客户正在运行一个名为 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 是配置所指定的需要(或不需要)的东西吗?运行相同代码的相同机器如何/为什么需要它?

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

最佳答案

Is linux-vdso.so.1 something that is needed (or not) as dictated by configuration somehow?

linux-vdso.so.1 是一个由内核注入(inject)到每个进程中的“库”。了解更多相关信息here .

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

关于glibc - 为什么相同的二进制文件需要在一台 64 位 RHEL 5.4 服务器上使用 linux-vdso.so.1,而不是在另一台服务器上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26266641/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com