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 más empleados para objetos son COFF y ELF. C30 por ejemlo soporta estos formatos.
Te paso un ejemplo utilizando C30.
Esta demás 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. También 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 definición de la función 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).
yo estaba hablando de DLL y extern se utiliza...
extern se utiliza para enlace estatico, no dinámico (DLL, Dynamic Link Library, biblioteca de enlace dinámico), y del enlace dinamico al micro pic hay un largo trecho compañero...
el EXTERN en c y en ccs el uso es el mismo.
Si bien CCS no es el ANSI C, extern se utliza de igual modo.
Esperamos poder ayudarte con todo esto jezus, tu iniciaste el hilo