重新加载 /etc/ld.so.preload 而不启动新 shell

重新加载 /etc/ld.so.preload 而不启动新 shell

我正在使用 添加预加载库/etc/ld.so.preload。我的问题是,它只有在创建新的 shell 后才会生效。如果我删除预加载库,也会发生这种情况。在加载新 shell 之前,我会收到有关缺少库的错误消息。

我的问题是,我如何强制重新加载/etc/ld.so.preload我查看了手册页,没有找到任何描述何时或如何加载的机制的内容。

答案1

当您将库添加到 /etc/ld.so.preload 文件时,它会指定动态链接器应在任何其他库之前加载该库。这意味着当您执行程序时,指定的库将在该程序所依赖的任何其他库之前加载。

但是,一旦预加载库被加载,它就会一直保留在内存中,直到加载它的进程终止。这意味着,如果您从 /etc/ld.so.preload 中删除该库,它将不会从内存中删除,直到加载它的进程终止。同样,如果您将库添加到 /etc/ld.so.preload,它将不会生效,直到创建新进程。

要强制动态链接器重新加载 /etc/ld.so.preload 中指定的库,可以使用以下命令:

sudo ldconfig -v -n /etc/ld.so.preload

此命令将重新加载 /etc/ld.so.preload 中指定的库和 /etc/ld.so.conf.d/ 中的其他配置文件。-v 标志用于将命令的输出打印到控制台,-n 标志用于指定包含配置文件的目录。

答案2

这可能不是您的问题的答案,但可以考虑作为替代方案。

您可以尝试使用下面的方法。

$ LD_PRELOAD="<colon separated .so path which might be in your ld.so.preload>" <your command>

例子:

LD_PRELOAD="/mypath1/myso1.so:/mypath2/myso2.so" ls -lh

相关内容