【问题标题】:Can I run an executable if the dynamic loader fails to find a library?如果动态加载器找不到库,我可以运行可执行文件吗?
【发布时间】:2013-07-11 16:36:38
【问题描述】:

我有一个构建系统,它使用硬编码的 RPATH 生成二进制文件。如果所需的包不在当前机器上,我有一个包管理器,它将下载并解压缩丢失的库。

我可以挂钩 linux 动态链接器,以便在找不到库的情况下运行我的包管理器吗?然后在库可用后重新运行动态链接器?

【问题讨论】:

  • 是的,但为什么你的包管理器不处理依赖关系?
  • 二进制文件已复制到与构建它的机器不同的机器上。我可以手动重新运行包管理器来获取包,但我希望它通过动态链接器自动工作。
  • 为什么你复制的是二进制而不是生成的包?
  • 我不认为我们在谈论同一件事。我的“包管理器”将第 3 方包安装到本地系统,它不像 tar,它不会创建包含二进制文件的包。一旦在目标机器上,包管理器需要的信息就在二进制文件的 RPATH 中。

标签: linux linker ld dynamic-linking


【解决方案1】:

使用 -Wl,--dynamic-linker=file(参见 man ld)

但重载动态链接器仅适用于加载可执行文件,不适用于共享库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 2019-06-10
    • 2021-02-15
    相关资源
    最近更新 更多