【问题标题】:Linking shared library dependency not being listing in ldd链接共享库依赖项未在 ldd 中列出
【发布时间】:2018-11-02 17:20:59
【问题描述】:

有一个针对 -lyaml 编译的库。但是 libyaml.so 没有被 ldd 列为依赖项。使用 autoconf 工具链成功构建。

$ nm libxxxx.so | grep -i yaml
 U yaml_document_delete
 U yaml_document_get_node
 U yaml_parser_delete
 U yaml_parser_initialize
 U yaml_parser_load
 U yaml_parser_set_input_file


$ readelf -d libxxxx.so
    Tag        Type                         Name/Value
    0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
    0x000000000000000e (SONAME)             Library soname: [libxxxx.so.0] 

还有另一个依赖于 libxxxx.so 的共享库。

$ ldd  lib/libxxxx1.so
    libzmq.so.5 => /usr/lib/x86_64-linux-gnu/libzmq.so.5 (0x00007fd45e072000)
    libxmaapi.so.0 => 

当我将我的可执行文件与 libxxxx1.so 链接时,它给出了未定义的符号错误。问题是如何链接依赖树中未找到的库?

此问题提供了忽略该问题的方法。 Linking with dynamic library with dependencies

【问题讨论】:

  • 您是否已将您的 libyaml 位置添加到 LD_LIBRARY_PATH
  • 我不喜欢人们来,问不完整的问题,然后离开......
  • 链接出错的方式有很多。无法重现,我们只能猜测。
  • @YSC 是的,我已经添加了。

标签: c++ c makefile shared-libraries gnu


【解决方案1】:

我发现的一种方法是使用 gcc 标志 -Wl,--no-as-needed 禁用优化。由于我已经在使用 -lyaml 进行链接,因此符号正在被解析。它有效,但效率不高。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-20
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 2012-11-01
    相关资源
    最近更新 更多