DSO missing from command line原因及解决办法
最近项目正经历着一次更新,一系列编译工具都进行了大版本的升级,随时而来的是,原本正常编译的代码出现了大量的warning,最终编译失败,其中一个问题困扰了比较长的时间,虽然fix的方法不难,但是一直不清楚根本原因,通过大量的google,终于找到的原因,特地记录一下。
先把主要的参考文章写一下:
Understanding DSO link change
Tool Chain Transition
主要是下面这行错误:
error adding symbols: DSO missing from command line
场景是:
- 我们有一个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才可以通过。
binutils2.22开始,其中的ld开始把--no-copy-dt-needed-entries默认打开,这样一来,ld不会再自动递归地解析链接的lib,而需要由用户来一一指定。
PS:检查binutils的版本,方法很简单:
ld -v
这样做的好处在于当libA有变化,甚至foo接口发生变化时,编译时就能报错。
另外,还以一个ld的选项--allow-shlib-undefined,作用是允许在动态库中存在未解析到的函数symbol,至于理由可以自行查看man ld,因为有些项目就是在运行时才能决定使用的动态库, ld的manual中也举了一个相应的例子。
时间仓促,没有贴代码上来,而且一定还有没有深入到的地方,日后再来完善,如果有不对的地方,欢迎指正!
DSO missing from command line原因及解决办法相关推荐
- 解决:无法添加符号: DSO missing from command line
1.编译pulseaudio报错: /usr/bin/ld: /tmp/ccIkVVbs.o: undefined reference to symbol 'pa_log_level_meta' /u ...
- error adding symbols: DSO missing from command line
原因:工程中有个 静态库 libxxx.a (xxx为你的库名称),这个静态库中没有找到对应的函数实现.但是在 /usr/lib64之类的路径中找到的libxxx.so.**中找到了函数实现. 解决方 ...
- Glib2之无法添加符号: DSO missing from command line(十九)
1.报错: # gcc extended-test.c -lpulse -lpulse-simple /usr/bin/ld: /tmp/ccepJsJD.o: undefined reference ...
- [Linux] DSO missing from command line
编译 FFmpeg 官方例程 gcc -o myplay demuxing_decoding.c -I /usr/local/include/ -L /usr/local/lib -lavformat ...
- DSO missing from command line
g++ /home/haizi/local_install/lib/libglog.so.0: error adding symbols: DSO missing from command line ...
- 报错Command line is too long. Shorten the command line xxx【解决办法】
运行springboot项目的时候,出现报错,报错信息如下: Error running OrderServiceBoot. Command line is too long. Shorten the ...
- error: unrecognized command line option '-fstack-protector-strong'解决办法
原文地址:https://blog.csdn.net/u014134262/article/details/50402928 今天编译kernel 的时候,报error: unrecognized c ...
- Please choose a writable location using the '-configuration' command line option 的解决办法
Invalid Configuration Location ,The configuration area at 'C:\Users\Administrator\ApplicationData\XM ...
- 解决/usr/local/lib/libglog.so.0: error adding symbols: DSO missing from command line
第一步: // 查看目录 /usr/lib 或 /usr/local/lib的目录下是否存在libglog.so.0 $ find libglog* libglog.a libglog.la libg ...
最新文章
- android string.xml前后加空格的技巧
- python图像边缘提取_python通过robert、sobel、Laplace算子实现图像边缘提取详解
- 哈啰在分布式消息治理和微服务治理中的实践
- c#中一个进程启动另一个进程并传递参数
- java unreported exception_Java异常处理
- 解决火狐https问题 安全连接问题
- PAT 乙级 1008. 数组元素循环右移问题 (20) Java版
- 推荐: 一个业务流程梳理工具Sam
- android内存溢出错误,Android Studio 生成 JavaDoc 空指针异常|文档编码出错|内存溢出...
- RabbitMQ学习——生产者与消费者入门例子
- 微软云计算解决方案与下一代数据中心
- 各区区号的字段和名称
- 优酷 IPv6 演进和实践指南
- python计算器实验报告_python作业模拟计算器开发(第五周)
- NYOJ 找球号(二)(哈希表)
- 【Linux】常用命令:网络、内存、cron 超详细介绍
- 微信小程序云函数NodeJs如何等待两次异步操作后返回数据给前端
- 把握云计算+引领云时代
- python用户输入字符串串从小到大排序_python字符串从小到大排序
- 太阳模拟器都能够实现哪些功能?