链接静态库的顺序问题

时间:2022-05-09 19:31:56

在链接静态库时,如果多个静态库之间存在依赖关系,则有依赖关系的静态库之间存在顺序问题,这个在使用静态库时,需要注意,否则会报符号找不到问题,举例:
libb.a依赖于是liba.a,而可执行文件test只直接依赖于libb.a,则链接选项应当为:
-b -a,而不是-a -b,否则会报liba.a中的某些符号找不到.
 
gcc -c a.c
ar cr liba.a a.o
gcc -c b.c
ar cr libb.a b.o # 虽然libb.a使用到了liba.o中的一些函数,但并不会将它们的定义包含进来,所以在链接test时需要指定这两个库
 
 
另外,在编译libb.a时是不指定liba.a的,因为编译一个静态库不会使用到链接选项,而只需要指定需要依赖的头文件路径即可.