为什么安装的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 中,但这些是单独的问题。
我对 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 中,但这些是单独的问题。