子流程的自定义 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/subprocess
或 subprocess
。
,那是 应该期望 发生的情况
如果您希望子进程使用显式加载程序调用 /path/to/my/ld-linux-x86-64.so.2 --library-path /path/to/my/libs /path/to/subprocess
,那么您 必须 安排 execve
个参数 那.
这就是为什么使用 patchelf
或 this answer 中的其他解决方案通常是更好的方法。
我正在 运行使用一组自定义库创建一个程序,如下所示:
/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/subprocess
或 subprocess
。
如果您希望子进程使用显式加载程序调用 /path/to/my/ld-linux-x86-64.so.2 --library-path /path/to/my/libs /path/to/subprocess
,那么您 必须 安排 execve
个参数 那.
这就是为什么使用 patchelf
或 this answer 中的其他解决方案通常是更好的方法。