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

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

main.c

#include 
int  main()
{
   b();
   a();
}

a.c

#include 
void  a(void)
{
   printf("func a in a\n");
}

До нашей эры

#include 

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)

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