makefile编译遇到DSO missing from command line

多次遇到这个问题,每次编译报错的原因又不一样,无奈只能遇到一次记录一次。

一、依赖缺少或者依赖顺序错误引起

undefined reference to symbol ‘_ZN2cv6imreadERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi’
…/…/lib/**.so: 无法添加符号: DSO missing from command line

楼主遇到的场景:项目更新,环境等编译工具都进行了升级,原本正常的编译遇到了大量编译不通过的情况。
解决方案参考:https://segmentfault.com/a/1190000002462705

众所周知,gcc编译的时候,如果文件 A 依赖于 文件B,那么编译的时候必须把A放在B的前面

参考资料的例子:
我们有一个shared libA中,定义了函数foo()
另一个静态库libB显示地链接了libA
一个可执行文件bin_c显示地链接了libA
那么问题来了,如果bin_c中调用了函数foo(),那么编译能不能通过?
在binutils<2.22时,ld正常完成了,bin_c对于foo的调用经由libB,传递到了libA,链接成功。
但是当binutils>=2.22时,编译出错了,ld会报上面的错,告诉你foo这个symbol解析不到。
这时,我们需要编译bin_c时,显示地链接libA才可以通过,否则报以上错误。
如果发现都正常链接了,但还是报错,继续检查链接的顺序。

二、链接文件不存在

笔者遇到
/usr/local/trt/lib/libnvparsers.so.7: 无法添加符号: DSO missing from command line
去usr/local/TensorRT-7.0.0.11/lib 查看了以下,发现软连接失效了,没有发现这个文件
重新链接即可
ln -s libnvparsers.so.7.0 libnvparsers.so.7

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值