【问题标题】:Show path of library that ld found through -l [duplicate]显示 ld 通过 -l 找到的库的路径 [重复]
【发布时间】:2019-12-04 15:35:01
【问题描述】:

是否可以让 g++/ld 显示库的绝对路径, -l 选项已被解析为? 在我的情况下,我试图通过 -llrs 链接 lrs 库,我怀疑它解析为 /usr/lib/liblrs.so 但我想确定。

【问题讨论】:

  • 只显示包含路径,不显示库路径。但是,显示库路径的类似方法只会列出所有候选者,而不是实际分辨率。
  • ldd foo 显示库的运行时分辨率,如果对您有帮助的话。
  • 如果使用g++ 链接,您可能想尝试-Wl,--verbose

标签: c++ c libraries


【解决方案1】:

ELF 文件不包含共享库的绝对路径。这就是动态链接器的工作。您可以通过运行来确认这一点。字符串可执行 | grep 库名。共享库可以位于链接器搜索路径上的任何位置。

readelf -d 可执行文件

要测试动态加载器的行为,请使用 ldd(列出动态依赖项)

下面带有 /bin/bash 的示例

ldd /bin/bash

libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6

您可能还想关注符号链接

ls -al /lib/x86_64-linux-gnu/libc.so.6

lrwxrwxrwx 1 root root 12 Feb 5 2019 /lib/x86_64-linux-gnu/libc.so.6 -> libc-2.23.so

【讨论】:

    猜你喜欢
    • 2012-08-19
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 2012-07-24
    • 2021-12-22
    相关资源
    最近更新 更多