Какой порядок в gcc для связи неразрешенного символа в статической библиотеке

При отладке проблемы с символами функции я нахожу странное поведение gcc, которое я не мог понять, проиллюстрируем следующим примером кода:

main.c

#include <stdio.h>
int  main()
{
   b();
   a();
}

a.c

#include <stdio.h>
void  a(void)
{
   printf("func a in a\n");
}

до н.э

#include <stdio.h>

void a()
{
   printf("func a in b\n");
}
void b()
{
  printf( "func b try to call a  \n");
  a();
}

компиляции:

gcc -c a.c
gcc -c b.c
ar -cr liba.a a.o
ar -cr libb.a b.o
gcc main.c liba.a libb.a

выполнить:

./a.out
func b try to call a  
func a in b
func a in b   

Мой вопрос:

Зачем вызывать функциюa вmain функцияa in b.c вместоa in a.c ?После изменения порядка библиотек:gcc main.c libb.a liba.a, результат тот же. Почему?Почему компоновщик не сообщает о конфликте символов в этой ситуации?

Ответы на вопрос(2)

Ваш ответ на вопрос