gpt4 book ai didi

c - --start-group 和 --end-group 链接器标志对动态库的意义

转载 作者:行者123 更新时间:2023-12-04 02:10:31 26 4
gpt4 key购买 nike

我们进行了一项练习,除非绝对必要,否则停止使用 --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。无论哪种方式,它都有效。

关于c - --start-group 和 --end-group 链接器标志对动态库的意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18505221/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com