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两次

请问:
是我学习到的链接原理有误,还是编译器进行了相关优化?

阅读 2.1k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进