链接共享库依赖项不在ldd中列出

时间:2018-05-23 16:17:55

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

有针对-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

1 个答案:

答案 0 :(得分:1)

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