C语言动态库互相依赖链接顺序问题
GCC编译时,若A.o
依赖 liba.so
, liba.so
依赖libb.so
则应该先链接 liba.so
后链接 libb.so
,反过来则会出错
我学习到的原因是:
- 编译器会顺序遍历所有的
.o
、.so
模块,遇到未定义的符号则放入列表U
- 顺序遍历所有的
.o
、.so
模块的过程中,使用该.o
、.so
中的符号对列表U
中的符号进行解释 - 遍历结束时,若
U
中仍然存在未定义符号,则报告Undefined symbol
错误
那么如果liba.so和libb.so互相依赖,理论上需要-la -lb -la
但实际操作发现,不需要链接liba.so
两次
请问:
是我学习到的链接原理有误,还是编译器进行了相关优化?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论