Como o vinculador sabe onde está a definição de uma função externa?

Eu li alguns posts e concluí que extern diz ao compilador que "esta função existe, mas o código para ela está em outro lugar. Não entre em pânico". Mas como o vinculador sabe onde a função está definida?

Meu CASE: - Estou trabalhando no Keil uvision 4. Há um arquivo de cabeçalho grlib.h e a função main está em grlib_demo.c (inclui grlib.h). Agora, há uma função GrCircleDraw () que é definida em Circle.c e chamada em grlib_demo.c, há também uma instrução

extern void GrCircleDraw (todos os argumentos);

em grlib.h. Minha consulta é como linker sabe onde a definição de GrCircleDraw () é desde Circle.c não está incluído em grlib.h e grlib_demo.c

Nota: - Os arquivos grlib.he Circle.c estão na mesma pasta. O código é executado com sucesso.