【问题标题】:Is it possible to permanently add directories to the default ld search path?是否可以将目录永久添加到默认的 ld 搜索路径?
【发布时间】:2022-01-14 16:45:46
【问题描述】:

我正在尝试安装一个将在此节点上普遍使用的库。当前,该库安装在包含其版本名称 /opt/sample-x.y.z/lib/libsample.so 的位置。理想情况下,我希望能够更新库,更改 sys 配置,而不是因为需要更改琐碎更改的路径而打扰其他开发人员。我已将库目录添加到 /etc/ld.so.conf.d/sample.conf 并运行 ldconfig,但这似乎只影响加载而不是链接。

当我运行 ldconfig -v | grep sample 时,我正确地看到了 libsample.so。

但是,每当我运行ld -lsample --verbose 时,它都找不到库。在详细输出中,它详细说明了它搜索的目录,而我使用 ldconfig 添加的目录不存在。作为一种解决方法,我测试了在 /usr/lib 中向库中添加符号链接,并且 ld 能够找到它。

还有其他方法可以将库添加到默认链接器路径吗?理想情况下,我正在寻找一个可以修改的配置文件,类似于要加载的配置文件。

如果重要的话,该节点是 Centos7 节点。

【问题讨论】:

  • 首先将库安装在默认搜索路径中怎么样?特别是在 /usr/lib64(对于 64 位 CentOS 7)?
  • 那么你的sample.conf 看起来像atm 吗?
  • @JohnBollinger 这是一种可能。我只需要在提供的安装程序之上编写包装脚本,因为默认情况下它不会将我需要的所有内容放在适当的位置。如果类似于 ld.so.conf 脚本的东西有效,它似乎是一个更快的选择,在这一点上它更像是一个一般知识问题。
  • @tink 这是非常基本的。实际的软件在几个位置都有库,但每个位置都在文件中的唯一行上捕获。没有尾随 / 在一行上。继续这个例子,它只是 /opt/sample-x.y.z/lib

标签: linux shared-libraries ld


【解决方案1】:

不,这是不可能的。 ld 在链接阶段使用的路径是通过脚本配置的,这些脚本在构建过程中被拉入 ld。构建 ld 后无法更新这些内容。还有其他与为 GCC 完成此任务相关的问题和答案,这些问题和答案似乎涉及 LIBRARY_PATH 环境变量。但是,该解决方案是 gcc 特定的。

【讨论】:

  • 这是我在阅读过程中发现的最好的。我想记录下负面反应,以防将来有人偶然发现这个问题。如果有人能够找到解决方案,我很乐意在未来更改所选答案。
猜你喜欢
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
  • 2015-11-11
相关资源
最近更新 更多