【问题标题】:Why an installed Centos system uses ld.2.17, yet compiling the same version of glibc-2.17 produces ld.so为什么安装的 Centos 系统使用 ld.2.17,但编译相同版本的 glibc-2.17 会产生 ld.so
【发布时间】:2020-01-17 11:44:54
【问题描述】:

我对 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目录,运行configure,一切正常,我可以看到如下-

$ 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 位 LSB 共享对象,x86-64,版本 1 (SYSV),动态链接”类型。如果它们具有相同的目的(我不知道它们会这样做),为什么会有名称和大小差异?

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

【问题讨论】:

  • 您的 ld.so 是否被剥夺了字符串?是调试版本吗?
  • ld.so 是“make”的结果。我没有传递任何参数,也没有编辑 Makefile。我想我明白你的意思了——这两种情况中的任何一种都会使 exec 的规模膨胀?我会查看 Makefile 看看是否有任何意义。

标签: linux compilation installation linker glibc


【解决方案1】:

我了解到 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 核心在引导期间转储,或者如何/是否可以在 /lib64 中安装新的 ld-2.17.so,但这些是单独的问题.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 2018-04-04
    • 1970-01-01
    • 2011-12-10
    • 2016-03-20
    • 2019-07-06
    • 2019-02-03
    相关资源
    最近更新 更多