我可以使用我自己的 ld.so.cache 吗?

syo*_*kit 14 dynamic-linking

ldconfig 有两个有趣的选项:

-f conf
      Use conf instead of /etc/ld.so.conf.
-C cache
      Use cache instead of /etc/ld.so.cache.
Run Code Online (Sandbox Code Playgroud)

我尝试复制/etc/ld.so.conf到我自己的主目录,并编辑它以包含我的本地库的路径,例如/home/syockit/local/usr/lib等。然后运行

ldconfig -f /home/syockit/ld.so.conf -C /home/syockit/ld.so.cache
Run Code Online (Sandbox Code Playgroud)

随后,为了确认库被缓存,我跑了

ldconfig -f /home/syockit/ld.so.conf -C /home/syockit/ld.so.cache -p | less
Run Code Online (Sandbox Code Playgroud)

它确实包括我所有的库,还包括系统库。

现在,我想让默认链接器使用这两个。但是在 中man ld.so,我没有提到能够使用自定义.conf.cache. 那么以上两个选项的意义ldconfig何在呢?

gol*_*cks 9

我认为您的问题的答案是否定的,尽管您可以通过其他方式完成同样的事情。

在 man ld.so 中,我没有提到能够使用自定义 .conf 或 .cache

是的,但有提到$LD_LIBRARY_PATHand 和--library-path,前者更普遍有用。

上面两个选项有ldconfig什么意义呢?

因此,您可以在不覆盖系统缓存的情况下创建缓存,也无需使用系统配置文件。

  • 它可以用于系统映像或 chroot 环境等。 (2认同)

Gil*_*il' 6

/etc/ld.so.conf仅由ldconfig(缓存生成程序)读取,而不由ld.so(动态加载程序)读取。如果要生成不同于系统默认值的缓存,可以更改配置文件的位置。

/etc/ld.so.cache被读取ld.so,您无法从其他位置读取它。尽管如此,将不同的输出位置传递给ldconfig. 最常见的用例可能是chroot环境。您可以使用在备用根ldconfig -r /some/root上运行ldconfig,并将输出放在您想要的任何位置(在该根内或外)。您需要在/some/root/etc/ld.so.cache那里发出输出或稍后将其复制到那里。还有其他相当模糊的用例,例如,如果您想以ldconfig非特权用户(无法写入/etc/ld.so.cache)的身份运行,然后稍后将文件移动到位。