强制 Linux 程序从另一个位置读取 libc 库文件



My Machine is slackware Linux 64 kernel 3.0.4. 对于这台机器,我没有root访问权限,管理员不可用。

我正在尝试运行一个需要库文件 libc 版本 2.14 的程序,而安装在/lib64 中的程序是 libc-2.13。

我有一台相同的机器,我有根访问权限。我尝试将 libc-2.14 文件从这台机器复制到第一台,然后将其放入 $HOME/lib64 文件夹并将此文件夹添加到LD_LIBRARY_PATH,然后创建一个新的符号链接 libc.so.6 指向 libc-2.14 文件,但程序不断读取/lib64 中的 libc.so.6 文件,该文件指向 libc-2.13。我无法修改/lib64 中的任何内容,因为我不是 root。

有没有办法解决这个问题? 提前致谢

您还需要从glibc复制其他文件。 您将需要程序解释器/lib64/ld-linux-x86-64.so.2,也许还需要libdl.so.2libm.so.6libpthread.so.0和更多这些辅助库。

拥有这些后,您可以尝试使用显式动态链接器调用使用其他 glibc 启动任意程序。 假设您已将文件复制到当前目录中,您可以尝试此操作:

./ld-linux-x86-64.so.2 --library-path . --inhibit-cache /bin/bash

请注意,这仅适用于直接启动的二进制文件(示例中bash(。 子进程(从 shell 启动的命令(将再次使用 glibc 系统。

如果您没有复制所有必需的 glibc 库,或者区域设置格式发生了不兼容的更改,因此新的 glibc 无法使用系统语言环境,则仍可能存在问题。

最新更新