¿Cómo sabe el enlazador dónde está la definición de una función externa?

Leí algunas publicaciones y llegué a la conclusión de que extern le dice al compilador que "Esta función existe, pero el código para ella está en otra parte. No se preocupe". Pero, ¿cómo sabe el enlazador dónde se define la función?

Mi CASO: - Estoy trabajando en Keil uvision 4. Hay un archivo de encabezado grlib.h y la función principal está en grlib_demo.c (incluye grlib.h). Ahora, hay una función GrCircleDraw () que se define en Circle.c y se llama en grlib_demo.c, también hay una declaración

extern void GrCircleDraw (todos los argumentos);

en grlib.h. Mi consulta es cómo el enlazador sabe dónde está la definición de GrCircleDraw () ya que Circle.c no está incluido en grlib.h y grlib_demo.c

Nota: - Los archivos grlib.h y Circle.c están en la misma carpeta. El código se ejecuta con éxito.

Respuestas a la pregunta(4)

Su respuesta a la pregunta