gpt4 book ai didi

c - 为什么 libc 依赖于 ld.so?

转载 作者:行者123 更新时间:2023-12-05 09:35:51 25 4
gpt4 key购买 nike

我一直认为libc应该是一个独立的动态库,直到我发现:

$ ldd /lib/x86_64-linux-gnu/libc.so.6
/lib64/ld-linux-x86-64.so.2 (0x00007fd743c00000)
linux-vdso.so.1 (0x00007fffc75f4000)

谁能告诉我为什么 libc 需要 ld.so 以及它使用什么功能?

最佳答案

ld.so任何应用程序或与共享库链接的共享库都需要:

The programs ld.so and ld-linux.so* find and load the sharedobjects (shared libraries) needed by a program, prepare theprogram to run, and then run it.

应用程序通常不会调用 ld-linux-x86-64.so 中的任何函数,而是加载可执行文件和共享库并将控制流传递给通常为 C 的应用程序和 C++ 库运行时初始化代码。这种对 ld-linux.so* 的依赖是通过 ELF 文件的 .interp 部分建立的(参见 readelf -l/lib/x86_64-linux-gnu/libc.so.6 输出),这不是 ldd 显示的内容。

ldd,但是(递归地)在动态部分显示标记为 NEEDED 的库(参见 readelf -d/lib/x86_64-linux-gnu/libc .so.6 输出)。在 Linux 上,共享库的线程本地存储支持由 /lib64/ld-linux-x86-64.so.2 实现。这是一个实现细节,但也是 glibc 依赖 ld-linux-x86-64.so 的原因。

关于c - 为什么 libc 依赖于 ld.so?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65581628/

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