ven*_*rao 2 c linker circular-dependency loader
我们进行了一项练习,除非绝对必要,否则停止使用--start-group和--end-group进行静态链接.我们无条件地使用了这个,无论所讨论的静态库是否具有循环依赖性.我理解在我们取出无条件的--start-group和--end-group之后,链接器的压力较小,但只将它放在真正需要的地方.
我想知道动态链接库的这些选项的重要性.
ld.so运行时加载程序如何解决动态库的循环依赖关系(如果有的话)?
这提出了另一个问题,我们是否真的要担心动态库的--start-group和--end-group使用呢?
说实话,我还没有读到这个,但我觉得可以在这里问一下.
与静态库不同,动态库即使没有提供有用的符号也会被加载.这使得订单的相关性降低.
对于静态库,错误的顺序可能导致所需的库或.a文件中的对象不被采用,即使以后需要它们也是如此.这是什么--start-group和--end-group解决.
使用动态库,两个订单都有效.假设liba.so出口a并libb.so要求它.如果liba.so先libb.so加载,则加载时,它将使用它.如果libb.so先加载,那么a将暂停一段时间,直到liba.so加载为止.无论哪种方式,它都有效.