子流程的自定义 ld-linux.so

Custom ld-linux.so for subprocesses

我正在 运行使用一组自定义库创建一个程序,如下所示:

/path/to/my/ld-linux-x86-64.so.2 --library-path /path/to/my/libs /path/to/my/executable

这对我正在尝试的大多数程序都非常有效运行,但它似乎不适用于生成子进程的程序。我很确定子进程是用标准 glibc execve 生成的。子进程因库错误而失败,这似乎是由于未正确执行而引起的。该程序使用 LD_LIBRARY_PATH 设置为一个目录,该目录包含除 libc 之外的所有库,位于无发行版 Docker 容器中,所以我很确定我的所有库都是正确的。

我也尝试过同时使用设置 LD_LIBRARY_PATH 和调用 ld-linux-x86-64.so.2,但这也不起作用。

我认为问题是子进程正在恢复到系统 /lib64/ld-linux-x86-64.so.2

对于上下文,我有一个二进制文件(和第二个二进制文件,第一个二进制文件作为子进程调用)我没有构建我想要 运行 在安装了不同动态库集的各种系统上.使用 LD_LIBRARY_PATH 并提供除 libc 之外的所有库适用于大多数环境,但安装了非常旧的 glibc 的环境除外。

I think the problem is that the subprocess is reverting to the system /lib64/ld-linux-x86-64.so.2.

如果 execve 参数是 /path/to/subprocesssubprocess

,那是 应该期望 发生的情况

如果您希望子进程使用显式加载程序调用 /path/to/my/ld-linux-x86-64.so.2 --library-path /path/to/my/libs /path/to/subprocess,那么您 必须 安排 execve 个参数 .

这就是为什么使用 patchelfthis answer 中的其他解决方案通常是更好的方法。