c++ - 链接共享库依赖项未在 ldd 中列出
问题描述
有一个针对 -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 链接时,它给出了未定义的符号错误。问题是如何链接依赖树中未找到的库?
这个问题提供了忽略该问题的方法。 与具有依赖关系的动态库链接
解决方案
我发现的一种方法是使用 gcc 标志 -Wl,--no-as-needed 禁用优化。由于我已经在使用 -lyaml 进行链接,因此符号正在被解析。它有效但效率不高。
推荐阅读
- sql - 从组合框/文本框选择中插入 SQL
- shell - 当我更新 oh-my-zsh 时出现错误。我该如何解决?
- google-cloud-dataflow - BeamSql 对数组和地图的支持
- scala - 在带有密码确认的注册表单上键入不匹配
- python - Git Hooks 不在 Windows 上运行
- html - 我的 css 样式与元素在同一页面上工作,但从 .css 文件链接时不工作
- reactjs - 更新redux(用户身份验证)后反应渲染私有路由
- javascript - jQuery on() / living() 问题
- lua - HMAC-SHA2-224 Lua 实现没有给出正确的输出
- c++ - 非类型参数类型的 C++ 模板特化