关于静态链接库的问题

总结静态链接库中的链接顺序问题

我们知道静态库实际上是一个归档文件,其通过ar命令获得。这个归档文件中包含了*.o文件。并且链接器处理静态库时的顺序是从命令的右侧到左侧。

实际上链接器对于静态链接的处理是:从后向前扫描用户提供的静态库,然后在.o中寻找是否有需要的函数信息,如果没有则会去处理下一个.o文件。

所以我们需要将被依赖的静态库放在命令的后面,将存在依赖的静态库放在前面:

1
gcc  -la -lb main.c #liba.a依赖于libb.a

如果静态库少的时候我们可以通过它们的依赖关系来确定谁先谁后,但是一旦静态库过多,我们就很难知道它们之间的依赖关系。此时可以通过将它们都引用两次:

1
gcc -la -lb -la -lb main.c 

但是这种方法过于麻烦,所以gcc提供了简便方法:

1
gcc main.c --start-group -la -lb --end-group #通过这两个参数,将若干个静态库分为同一个组进行拓扑排序,自动解决依赖关系。

关于静态链接库的问题
https://ysc2.github.io/ysc2.github.io/2024/01/02/关于静态链接库的问题/
作者
Ysc
发布于
2024年1月2日
许可协议