为什么 ld-linux-x86-64.so.2 link 会针对意外位置?
Why does ld-linux-x86-64.so.2 link against unexpected location?
我已经在 debian 的 /root/tools/
中安装了一个新的 glibc,它已经预装了 glibc。为了测试新的 glibc,我输入:
gcc test.c -Wl,-rpath=/root/tools/lib -Wl,--dynamic-linker=/root/tools/lib/ld-linux-x86-64.so.2
生成 a.out
,然后键入:
ldd a.out
显示
linux-vdso.so.1 (0x00007ffd1018c000)
libc.so.6 => /root/tools/lib/libc.so.6 (0x00007fc7f468b000)
/root/tools/lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007fc7f4855000)
但是输入 ls -l /root/tools/lib/ld-linux-x86-64.so.2
,
它显示 /root/tools/lib/ld-linux-x86-64.so.2 -> ld-2.33.so
为什么新 glibc 中的 ld.so link 反对 /lib64 中的 ld.so?这怎么解释?
then type: ldd a.out
.
当存在多个 GLIBC 安装时,您应该停止使用 ldd
-- 它会骗您。
相反,这样做:
env LD_TRACE_LOADED_OBJECTS=1 ./a.out
该命令会告诉您实际上 加载了哪些对象。
看起来你的设置是正确的,你只是被ldd
误导了。
更新:
Alternatively, using ldd which is in /root/tools/bin/ also displays right result
是的,但是这会显示错误的结果,例如/bin/date
,因此 ldd
会以 另一种方式 。
如果您已经知道哪个 ldd
是正确的,您可以使用它。请注意,使用“错误的”ldd
会产生令人困惑的输出。东西LD_TRACE_LOADED_OBJECTS
不苦
我已经在 debian 的 /root/tools/
中安装了一个新的 glibc,它已经预装了 glibc。为了测试新的 glibc,我输入:
gcc test.c -Wl,-rpath=/root/tools/lib -Wl,--dynamic-linker=/root/tools/lib/ld-linux-x86-64.so.2
生成 a.out
,然后键入:
ldd a.out
显示
linux-vdso.so.1 (0x00007ffd1018c000)
libc.so.6 => /root/tools/lib/libc.so.6 (0x00007fc7f468b000)
/root/tools/lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007fc7f4855000)
但是输入 ls -l /root/tools/lib/ld-linux-x86-64.so.2
,
它显示 /root/tools/lib/ld-linux-x86-64.so.2 -> ld-2.33.so
为什么新 glibc 中的 ld.so link 反对 /lib64 中的 ld.so?这怎么解释?
then type:
ldd a.out
.
当存在多个 GLIBC 安装时,您应该停止使用 ldd
-- 它会骗您。
相反,这样做:
env LD_TRACE_LOADED_OBJECTS=1 ./a.out
该命令会告诉您实际上 加载了哪些对象。
看起来你的设置是正确的,你只是被ldd
误导了。
更新:
Alternatively, using ldd which is in /root/tools/bin/ also displays right result
是的,但是这会显示错误的结果,例如/bin/date
,因此 ldd
会以 另一种方式 。
如果您已经知道哪个 ldd
是正确的,您可以使用它。请注意,使用“错误的”ldd
会产生令人困惑的输出。东西LD_TRACE_LOADED_OBJECTS
不苦