Autor Tema: Error al crear librerias  (Leído 1879 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Error al crear librerias
« en: 01 de Febrero de 2013, 19:33:21 »
  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:

Código: C
  1. #include "libreria.c"

  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

Código: C
  1. #define valor 10
  2. void suma (unsigned char, unsigned char);


libreria.c

Código: C
  1. #include "libreria.h"
  2.  
  3. void suma (unsigned char a, unsigned char b)
  4. {
  5.   PORTC = a + b;
  6. }

programa.c

Código: C
  1. #include <xc.h>
  2.  
  3. #pragma config FOSC = HS, WDTE = OFF, LVP = OFF
  4.  
  5. #include "libreria.h"
  6.  
  7. void main(void)
  8. {
  9.   unsigned char a;
  10.  
  11.   TRISC = 0;
  12.   INTCONbits.GIE = 0;
  13.   while (1)
  14.   {
  15.     a = valor;
  16.     suma (2,3);
  17.   }
  18. }


  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.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Error al crear librerias
« Respuesta #1 en: 01 de Febrero de 2013, 20:40:25 »
En el main.c tienes que llamar a libreria.c

Luego el libreria.c es el que hace la llamada a libreria.h

Generalmente en los .h están las definiciones y en los .c las funciones
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Error al crear librerias
« Respuesta #2 en: 01 de Febrero de 2013, 21:07:53 »
  Si incluyo el .c en el main, funciona perfectamente. Mi idea era incluir el .h, ya que vi algunos ejemplos que así debería ser suficiente.

  En el .h se encuentran definidas las funciones (prototipo) y en el .c se encuentran implementadas. Es por ello que, supuestamente, debería funcionar el incluir el .h

  A no ser que, inlcuir el .h únicamente, sólo funcione con librerías ya precompiladas.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Error al crear librerias
« Respuesta #3 en: 01 de Febrero de 2013, 21:14:59 »
Generalmente se llama al .h que es quien contiene la declaración de las definiciones (macros) y funciones publicas de la librería. Ambos archivos deben estar incluidos en el proyecto para crear los archivos objeto que luego serán vinculados, seguramente por eso dice que no esta definido, porque no compila el archivo fuente.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Error al crear librerias
« Respuesta #4 en: 01 de Febrero de 2013, 21:36:47 »
Generalmente se llama al .h que es quien contiene la declaración de las definiciones (macros) y funciones publicas de la librería. Ambos archivos deben estar incluidos en el proyecto para crear los archivos objeto que luego serán vinculados, seguramente por eso dice que no esta definido, porque no compila el archivo fuente.


Saludos!


  Aha!!!!!!!! ahí estaba el error entonces. Yo quería simplemente incluir el .h, ya que no le encontraba mucho sentido hacer un .h y un .c y tener que incluir ambos, siendo que hacer un .c era suficiente.

  Imagino que el beneficio radica en que el .h tendrá únicamente las definiciones y por lo tanto si se quiere saber los parámetros de tal o cual función no será necesario marearse leyendo todo el código de la implementación de las funciones buscando dichos datos.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Error al crear librerias
« Respuesta #5 en: 01 de Febrero de 2013, 23:01:25 »
En realidad que sea .h o .c creo es una regla nemotécnica, por decirlo así.
La extensión no hace al contenido.

En tu caso, podrías usar un solo archivo donde defines las funciones (prototipos) y tambien las implementas. Y tu archivo puede tener indistinto extensión .h o .c

A lo que va Suky es cuando el .h contiene definiciones constantes o macros, y estructuras tambien que pueden ser usadas en mas de un archivo .c

Un caso de ejemplo puede ser el GenericTypeDefs.h en C18, supongo que CCS tendrá uno similar.
El GenericTypeDefs.h es llamado con el include desde el .c donde lo necesites.

Yo creo que va un poco en como se siente mas cómodo uno, y tranquilamente dependiendo del tamaño de la libreria puedes usar ambos métodos.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Error al crear librerias
« Respuesta #6 en: 02 de Febrero de 2013, 00:42:35 »
  Perfecterijillo!!!!!!!  Gracias a ambos por las respuestas.

  Espero poder decidirme por alguna forma sin querer cambiar luego  :D
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas