gcc 相互依赖的多个静态库的连接方式是如何的?
[local]1[/local]a.c
int a = 3;
extern int b;
b.c
int b = 3;
extern int a;
func.c
#include <stdio.h>
#include <stdlib.h>
extern int a,b;
int main(int argc, char *argv[])
{
printf("a=%d, b=%d\n",a ,b);
return 0;
}
如上定义好a.c ,b.c,func.c三个源码后,int a = 3;
extern int b;
b.c
int b = 3;
extern int a;
func.c
#include <stdio.h>
#include <stdlib.h>
extern int a,b;
int main(int argc, char *argv[])
{
printf("a=%d, b=%d\n",a ,b);
return 0;
}
zyd@HCC:~/projects> gcc a.c -c
zyd@HCC:~/projects> gcc b.c -c
zyd@HCC:~/projects> ar cr liba.a a.o
zyd@HCC:~/projects> ar cr libb.a b.o
使用以上命令分别得到两个库文件liba.a和libb.a
这样,库文件liba.a应该依赖于libb.a中定义的变量b;
libb.a应该依赖于liba.a中定义的变量a;
但是为什么使用命令:
zyd@HCC:~/projects> gcc func.c -la -lb -L./ -g -o test
能顺利的得到目标文件test,而没有因为库文件的依赖关系要求-lb之后再连接一个-la呢?