【问题标题】:Does ldd reports all dependencies of a library?ldd 是否报告库的所有依赖项?
【发布时间】:2023-03-11 02:01:01
【问题描述】:

假设我们有一个名为 utils.so 的共享库。它可能包含未定义的符号。还假设 ldd 报告该库依赖于其他一些库:

$ ldd utils.so
  library1.so
  library2.so
  ...
  libraryN.so

(顺便说一句,utils.so 可能不仅依赖于一些共享库,还依赖于一些静态库?)

utils.so 的所有未定义符号是否都由库 library1.so、library2.so、...、libraryN.so 解析?

关于静态库的同样问题 - 静态库的所有未定义符号是否都由 ldd 报告的库解析?

【问题讨论】:

    标签: linux shared-libraries static-libraries ld ldd


    【解决方案1】:

    难道utils.so的所有未定义符号都被库library1.so、library2.so、...、libraryN.so解析了

    不一定。您可以创建一个没有依赖关系但具有未定义符号的共享库。如果符号是由可执行文件(或已经加载的共享库)提供的,这样的库将正常工作,否则无法加载。除非特别需要针对可执行文件解析符号,否则不建议创建此类库。

    关于静态库的同样问题

    ldd 与静态库无关,它无法读取它们或报告有关它们的任何信息。静态库没有依赖项。它们或多或少是对象的愚蠢档案。

    【讨论】:

    • 那你能告诉我 ldd 打印什么库吗??
    • man ldd 的第一行说 ldd 打印命令行指定的每个程序或共享对象所需的共享对象(共享库)
    • 如果是这样,那么“utils.so 的所有未定义符号都由库 library1.so、library2.so、...、libraryN.so 解析”一定是真的。但你说这不是真的。你能详细说明你的答案吗?
    • 由于多种原因,您的说法不正确,但是当您可以用 10 行代码构建一个反例时,这些原因并不重要。
    • 为了演示,coliru.stacked-crooked.com/a/e1c7fcefd25c4a02抱歉,10多行:(
    猜你喜欢
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多