Hola gente, les escribo porque tengo un problema y he buscado en google y no pude hallar una solución.
Tengo hechas algunas librerías en Hi-Tech C (únicamente el archivo .C) y siempre las he utilizado incluyendo directamente dicho archivo en mi programa. Por supuesto teniendo en cuenta que el archivo se encontrase dentro de la carpeta del proyecto.
Ejemplo:
Eso siempre me funcionó bien. Ahora estoy intentando hacer los archivos .H (cabeceras de las librerías) para incluir sólo el .H en el programa, pero arroja error al compilar el programa.
Pensé que podría tratarse de algún error de la HiTech, así que bajé el compilador XC8 y estoy utilizándolo con MPLABX en linux 64. Más precisamente en Kubuntu 10.04.
Agrego a continuación los códigos y luego el error obtenido.
libreria.h#define valor 10
void suma (unsigned char, unsigned char);
libreria.c#include "libreria.h"
void suma (unsigned char a, unsigned char b)
{
PORTC = a + b;
}
programa.c#include <xc.h>
#pragma config FOSC = HS, WDTE = OFF, LVP = OFF
#include "libreria.h"
void main(void)
{
unsigned char a;
TRISC = 0;
INTCONbits.GIE = 0;
while (1)
{
a = valor;
suma (2,3);
}
}
La variable a de mi programa toma el valor correcto, el que se encuentra definido en el archivo "libreria.h". Pero cuando llega la línea de la función suma, arroja el siguiente error:
:0: error: undefined symbol:
(908) exit status = 1
_suma(dist/default/production/Pruebaxc8.X.production.obj)
Por lo que entiendo, no está encontrando la definición de la función suma.
Si incluyo el archivo "libreria.c" a mi programa funciona perfectamente. Pero he visto en muchos ejemplos, que debería ser suficiente con sólo incluir el archivo "libreria.h"
Obviamente ambos archivos, "libreria.h" y "libreria.c", se encuentran en la misma carpeta del propio proyecto.