强制 linux 程序从另一个位置读取 libc 库文件
Forcing a linux program to read the libc library file from another location
我的机器是 slackware linux 64 内核 3.0.4。
对于这台机器,我没有 root 访问权限,管理员也不可用。
我正在尝试 运行 一个需要库文件 libc 版本 2.14 并且安装在 /lib64 中的程序是 libc-2.13。
我有一台具有 root 访问权限的相同机器。我尝试将 libc-2.14 文件从这台机器复制到第一台机器,然后将其放入 $HOME/lib64 文件夹并将此文件夹添加到 LD_LIBRARY_PATH,然后创建一个新的符号 link libc.so.6 指向 libc-2.14 文件,但程序不断读取 /lib64 中指向 libc-2.13 的 libc.so.6 文件。我不能修改 /lib64 中的任何内容,因为我不是 root。
有没有办法解决这个问题?
提前致谢
您还需要从 glibc 复制其他文件。您将需要程序解释器 /lib64/ld-linux-x86-64.so.2
,也许还需要 libdl.so.2
、libm.so.6
、libpthread.so.0
以及更多这些辅助库。
一旦有了这些,您就可以尝试使用显式动态链接器调用与其他 glibc 一起启动任意程序。假设你已经将文件复制到当前目录,你可以试试这个:
./ld-linux-x86-64.so.2 --library-path . --inhibit-cache /bin/bash
请注意,这仅适用于直接启动的二进制文件(示例中的 bash
)。子进程(从 shell 启动的命令)将再次使用系统 glibc。
如果您没有复制所有必需的 glibc 库,或者如果语言环境格式发生了不兼容的更改,导致新的 glibc 无法使用系统语言环境,仍然可能会出现问题。
我的机器是 slackware linux 64 内核 3.0.4。 对于这台机器,我没有 root 访问权限,管理员也不可用。
我正在尝试 运行 一个需要库文件 libc 版本 2.14 并且安装在 /lib64 中的程序是 libc-2.13。
我有一台具有 root 访问权限的相同机器。我尝试将 libc-2.14 文件从这台机器复制到第一台机器,然后将其放入 $HOME/lib64 文件夹并将此文件夹添加到 LD_LIBRARY_PATH,然后创建一个新的符号 link libc.so.6 指向 libc-2.14 文件,但程序不断读取 /lib64 中指向 libc-2.13 的 libc.so.6 文件。我不能修改 /lib64 中的任何内容,因为我不是 root。
有没有办法解决这个问题? 提前致谢
您还需要从 glibc 复制其他文件。您将需要程序解释器 /lib64/ld-linux-x86-64.so.2
,也许还需要 libdl.so.2
、libm.so.6
、libpthread.so.0
以及更多这些辅助库。
一旦有了这些,您就可以尝试使用显式动态链接器调用与其他 glibc 一起启动任意程序。假设你已经将文件复制到当前目录,你可以试试这个:
./ld-linux-x86-64.so.2 --library-path . --inhibit-cache /bin/bash
请注意,这仅适用于直接启动的二进制文件(示例中的 bash
)。子进程(从 shell 启动的命令)将再次使用系统 glibc。
如果您没有复制所有必需的 glibc 库,或者如果语言环境格式发生了不兼容的更改,导致新的 glibc 无法使用系统语言环境,仍然可能会出现问题。