Какой порядок в 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
, результат тот же. Почему?Почему компоновщик не сообщает о конфликте символов в этой ситуации?