在 RHEL5.7 中更改 ld-linux-x86-64.so.2 的版本

1 linux shared-libraries

我正在尝试使用与 /lib64 中的 ld-linux-x86-64.so.2 不兼容的共享库。我没有 root 访问权限,因此无法更改 /lib64 中的文件。有没有办法告诉我的 RHEL5.7 盒子使用不同的 ld-linux-x86-64.so.2?我已经尝试将路径放在我需要在 $LD_LIBRARY_PATH 中使用的版本,但它在那里被忽略了。

我有一个与一些共享库打包在一起的可执行文件。可执行文件主要与机器上已经找到的库一起使用,但每隔一段时间就会崩溃并指向我从 /lib 使用的库之一。当我将可执行文件附带的一些库添加到我的 LD_LIBRARY_PATH 时,它会导致诸如 'ls' 'cp' 'ldd' 之类的简单命令的分段错误 ld-linux-x86-64.so.2 的一个版本也出现了使用此可执行文件,当我运行命令 ./ld-linux-x86-64.so.2 --list libc.so (或导致命令中断的其他库)时,它不会导致段错误。我希望能够使用随软件打包的 ld-linux-x86-64.so.2 进行测试,以确保解决了问题(并且没有 t 导致其他人)在去 IT 并让他们对我们将运行软件的所有机器上进行更改之前。或者,如果可能的话,将变通方法构建到我的工作脚本中,这样我就不必经历整个变更请求过程。

包含的 libc.so 与 ld-linux.so 不兼容的一个症状是当我尝试执行命令时如下所示。 cp:重定位错误:libc.so.6:符号 _dl_tls_get_addr_soft,版本 GLIBC_PRIVATE 未在文件 ld-linux-x86-64.so.2 中定义,带有链接时间参考 我是唯一一个使用我的机器的人,但我的公司赢了不要向用户授予 root 访问权限,因为如果您在一个 linux 机器上拥有 root 权限,那么网络的设置方式就是您在所有这些机器上都拥有它。

Ric*_*lka 6

很抱歉这个“答案”,我试图把它放在对你的问题的评论中,但间距和格式是有限的。

ld-linux-x86-64.so.2 是您操作系统的核心部分。它实际上运行每个(64 位)动态应用程序。它不像应用程序本身那样是一个库,而是一个在您运行应用程序时调用的处理程序。

基本上,当你运行一个动态应用程序时,内核首先运行 ld-linux.so(或者它是你的 bitsize、distro 等的任何名称)。ld-linux.so 然后查看您的应用程序,查看您需要的库,查看库的任何硬编码路径(例如 rpath)检查 LD_LIBRARY_PATH,然后查找所有这些库,确保它们匹配位大小、名称、你有什么。然后它收集所有这些,加载它们,并运行你的应用程序。如果找不到库,它就不会运行您的应用程序。

ld-linux.so 不受 LD_LIBRARY_PATH 的影响,因为它是由内核运行的,而且内核不会像 ld-linux.so 那样加载库,它只有配置运行的库。同样,不是库,所以不要使用库语义 (LD_LIBRARY_PATH) 来更改它的调用方式。它确实有影响它运行的环境变量 -man ld-linux.so有关详细信息,请参阅(除了 LD_LIBRARY_PATH,LD_PRELOAD 非常有用)。

我很想知道你的问题是什么。无意冒犯,但这似乎是一个XY 问题。这又是一个核心操作系统部分。如果它坏了,你的操作系统就会坏掉。如果你想把它换掉,你可能会影响(阅读:可怕地中断)系统的其余部分。由于您没有 root,我想您不是这个盒子里的唯一一个,而且您会激怒一些人。:)

你想做什么?