如何确定默认共享库路径?

如何确定默认共享库路径?

有些发行版是,/lib64有些是/lib/x86_64-linux-gnu,也许还有其他格式。 bash 有没有统一的方法来确定这一点?

答案1

首先你应该弄清楚指定路径的目标。它可以是以下之一:

  1. 在哪里搜索已安装的库。
  2. 在哪里安装库,以使它们对链接器或运行时加载器可见。
  3. 在哪里安装库,以符合发行版政策。

对于 (3),唯一的真实来源是发行版策略描述,它是人类可读的文档。您无法从缓存等中确定这一点/etc/ld.so.confldconfig因为您无法找出哪个位置是首选位置以及哪个位置是旧位置;可以通过计算库来获得一些提示,但这绝对不适用于 shell 脚本。

对于 (1) 和 (2),读取并解释/etc/ld.so.conf(但这并不简单,因为它通常包括对其他文件或目录内容的通配符的引用)。您还可以解析ldconfig -p并累积列出的目录的输出。但要注意与现有库可能发生的冲突,以及更改库集后需要重新创建 ldconfig 缓存。

答案2

通常您可以通过阅读来获取此信息/etc/ld.so.conf。该文件可能包含其他文件;在我的系统上,它包括/etc/ld.so.conf.d.

请注意,将搜索多个目录。另请注意,这不会影响动态链接器的路径ld.so,它嵌入在二进制文件中,并且对于给定的体系结构和 ABI 通常是统一的。

相关内容