为什么安装的Centos系统使用ld.2.17,编译相同版本的glibc-2.17会产生ld.so

Why an installed Centos system uses ld.2.17, yet compiling the same version of glibc-2.17 produces ld.so

我对 ld.so 和 ld-2.17.so 之间的关系感到困惑。具体来说,为什么 /lib64/ld-linux-x86-64.so.2 在新安装的版本中链接到 ld-2.17.so,然后如果我构建相同版本的 glibc (2.17),生成的构建目录显示不同链接文件?我没有安装任何新的 glib 2.17 可执行文件,只是在规定的 glibc-build 目录中构建它们。

这是 Centos 7.6 的全新安装,来自 centos.org 镜像之一的当前可下载媒体。

$ uname -a
Linux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

glibc 版本为

$ ldd --version

ldd (GNU libc) 2.17
Copyright (C) 2012 Free Software Foundation, Inc.

以及我知道的已安装链接器。

$ ls -lt /lib64/ld*

lrwxrwxrwx. 1 root root     10 Sep 15 17:43 /lib64/ld-linux-x86-64.so.2 -> ld-2.17.so
-rwxr-xr-x. 1 root root 163400 Oct 30  2018 /lib64/ld-2.17.so

下载glibc-2.17.tar.gz后,解压,创建glibc-build目录,运行配置,一切正常,可以看到如下-

$ ls -lt ~build-glibc/elf/ld*

lrwxrwxrwx. 1 root root       5 Sep 16 07:25 ld-linux-x86-64.so.2 -> ld.so
-rwxr-xr-x. 1 root root  850208 Sep 16 07:25 ld.so

ld.so 和 ld-2.17.so 都链接到 ld-linux-x86-64.so.2 但大小不同。它们似乎都是 "ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked," 类型。如果它们的用途相同(我不知道它们是否如此),为什么名称和尺寸存在差异?

我的目标是向 ~/elf/rtld.c 添加一些 printk 语句,以便更好地理解它的作用并复制生成的可执行文件,我认为这将是 ~/elf/ld.so因为它们位于同一目录中,所以进入 lib64 目录。我不知道这是否行得通,但我想了解 ld.so 和 ld-2.17.so 在继续之前是否可以互换。或者,也许我正在查看对 rtld.c?

所做更改的完全不正确的结果可执行文件

我了解到 ld.so 是 "make" 的结果,而 ld-2.17.so 是 "make install" 的结果。这似乎已经通过在配置和制作新的 glibc-2.17 之前设置测试目录来证明。

来自 glibc-build 目录 -

../glibc-2.17/configure --prefix ~/glibc-build/test
make
make install

并在 test/lib.

中找到 ld-2.17.so

我仍然不确定为什么大小不同或为什么新的 ld-2。17.so 核心在引导期间转储,或者 how/if 可以安装一个新的 ld-2。17.so 在 /lib64 中,但这些是单独的问题。