【问题标题】:How does `ld` find secondary dependencies for shared objects?`ld` 如何找到共享对象的次要依赖项?
【发布时间】:2022-10-19 19:17:31
【问题描述】:

我有一种情况,我们链接到某个共享库libfoo.so,而这又取决于libbar.so。如果我们直接链接依赖于libfoo.so 的可执行文件,我们会通过给出标志来编译它:

-L<location of libbar.so> -lfoo

但是,这会在系统路径中选择libbar.so,而不是在命令行上指定的位置,其中符号集不正确,导致未定义的引用。如果我们将命令更改为:

-L<location of libbar.so> -lfoo -lbar

右边的libbar.sold 找到。这是可以预料的吗?我们如何告诉ld 在某个位置找到辅助依赖项而不显式链接到它?

【问题讨论】:

    标签: ld


    【解决方案1】:

    如果不指定-lbar,则会隐式添加间接依赖的libbar。在这种情况下,这个库的编译时链接搜索机制是不同的(它类似于运行时链接器ld.so 在运行时搜索库的方式)。查看ld 手册中的-rpath-link 选项。在那里你可以看到在-L 目录中搜索这种情况只在SunOs 系统上进行。为间接依赖项指定编译时链接搜索路径的最佳方法是使用 -rpath-link 选项,因为它具有最高搜索优先级。

    【讨论】:

      猜你喜欢
      • 2016-02-18
      • 2018-08-16
      • 2017-04-08
      • 2022-01-05
      • 1970-01-01
      • 2016-05-24
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多