Hola MLO__, parece que siempre nos encontramos en el foro.
La forma de trabajar con varios lenguajes es esta:
Compilas todos los codigos fuentes, obteniendo un codigo objeto por cada uno y luego enlazas a todos.
Obviamente, el enlazador debe reconocer el formato de cada objeto!
Los formatos ms empleados para objetos son COFF y ELF. C30 por ejemlo soporta estos formatos.
Te paso un ejemplo utilizando C30.

Esta dems este comentario, pero pude ser de ayuda a alguien:

Con el compilador pic30-coff-as genero el OBJ con formato COFF a partir del fuente en ASM.
Con el compilador pic30-gcc genero el OBJ con formato COFF a partir del fuente en C.
Con el enlazador pic30-coff-ld enlazo a todos los anteriores en un solo binario.
Con el pic30-bin2hex cambio el formato del binario (para a ser hex).

Para trabajar con formato ELF las herramientas serian pic30-elf-as, etc (ver directorio BIN de C30).
Todo esto para C30, pero con otros lenguajes es lo mismo: compilar todo en el mismo formato OBJ y despues enlazar. Tambin existen herramientas para convertir un formato OBJ en otro.

En realidad todos estos pasos siempre ocurren de forma transparente, incluso cuando solo tenemos un archivo escrito en C: finalmente todo es enlazado con crt0.o y alguna libreria que hubieramos empleado.

Las carpetas 01, 02 y 03 contienen lo mismo: primero los tres fuente, despues agregue un bat, y en el ultima ejecuta el bat.

---

A esta altura podemos concluir esto sobre el especificador extern: Sirve para indicar al compilador que toda referencia a dicha funcion deve resolverse durante el enlazado, porque la definicin de la funcin talvez se encuentra en otro fichero (pero si se define en el mismo no esta mal, hice esto en la funcion llamada 'recursiva' en el ejemplo adjunto).


