Ayuda sobre como utilizar una libreria desde un archivo
Hola a Todos!, tengo una pequeña duda sobre como utilizar una libreria en un archivo .c que estoy diseñando. Se trata de que en la libreria lib.h tengo una funcion que se llama mostrar_error y le paso una variable de tipo int. Esta funcion me devuelve una cadena de caracteres indicandome de que error se trata. Mi pregunta es:
En mi archivo modulo.c meto la libreria de esta forma #include "lib.h" y llamo a la funcion de este modo: mostrar_error(CODIGO_NO_RESUELTO) donde codigo no resuelto es una contante que tambien he definido en lib.h me sale un error al ponerlo asi y no se como hacerlo, he probado la clausula extern pero tampoco me funciona, espero q me ayudeis gracias.
En mi archivo modulo.c meto la libreria de esta forma #include "lib.h" y llamo a la funcion de este modo: mostrar_error(CODIGO_NO_RESUELTO) donde codigo no resuelto es una contante que tambien he definido en lib.h me sale un error al ponerlo asi y no se como hacerlo, he probado la clausula extern pero tampoco me funciona, espero q me ayudeis gracias.
No estaría de más que pusieras qué error te da.
Suponiendo que se encuentre el .h, hay que ver dónde está el código de esa función. Puede estar en el mismo .h o en otro fichero .c
Si está en otro fichero.c, tienes que incluidr dicho fichero también en la línea de compilación o proyecto.
Si está en una librería .dll, .lib (.so o .a si estás en linux) debes añadir dicha librería en tu proyecto o línea de compilado.
Se bueno.
Suponiendo que se encuentre el .h, hay que ver dónde está el código de esa función. Puede estar en el mismo .h o en otro fichero .c
Si está en otro fichero.c, tienes que incluidr dicho fichero también en la línea de compilación o proyecto.
Si está en una librería .dll, .lib (.so o .a si estás en linux) debes añadir dicha librería en tu proyecto o línea de compilado.
Se bueno.
La verdad es q tienes razon, la funcion mostrar_error esta implementada en otro fichero .c pero no se como tengo q hacerlo para compilarlo, ya que utilizo el microsoft visual c++ 6.0 y simplemente le doy a compile y luego a execute. tengo incluido esto en mi fichero .c:
#include <stdio.h>
#include "libmtp.h" en libmtp.h esta la cabecera de la funcion mostrar_error(int) y en el fichero libmtp.c esta la implementacion de la funcion, ¿tengo que poner esa libmtp.c en algun sitio?
al compilar no me da ningun error pero a la hora de ejecutar me salen estos dos:
-modulo1.obj : error LNK2001: unresolved external symbol "void __cdecl mostrar_error(int)" (?mostrar_error@@YAXH@Z)
-Debug/modulo1.exe : fatal error LNK1120: 1 unresolved externals
#include <stdio.h>
#include "libmtp.h" en libmtp.h esta la cabecera de la funcion mostrar_error(int) y en el fichero libmtp.c esta la implementacion de la funcion, ¿tengo que poner esa libmtp.c en algun sitio?
al compilar no me da ningun error pero a la hora de ejecutar me salen estos dos:
-modulo1.obj : error LNK2001: unresolved external symbol "void __cdecl mostrar_error(int)" (?mostrar_error@@YAXH@Z)
-Debug/modulo1.exe : fatal error LNK1120: 1 unresolved externals
Ya está, la próxima vez postea todo como en el último mensaje.
En el visual studio, dentro de FileView, tienes una serie de carpetas... Dentro de Source Files debes introducir todos los .c que quieras compilar (libtmp.c y el fichero con la funcion ppal).
En HeaderFiles deberás incluir todas las librerías externas que quieras usar (libtmp.h).
Una vez hecho esto el compilador ya sabe donde se encuentra cada fichero y no dará problemas.
Una solución a este problema es que cuando crees una librería y la quieras linkar desde otro proyecto al hacer el include añadas la ruta completa del fichero:
#include "c:\\mis documentos\archivos\libreria.h"
Las barras están duplicadas debido al caracter especial que tiene la contrabarra () cuando está entre comillas en C.
Otra solución es que cuando quieras usar una librería externa la copies junto con su respectivo .C en el directorio del proyecto junto con la función principal que las va a llamar.
Un saludo.
En el visual studio, dentro de FileView, tienes una serie de carpetas... Dentro de Source Files debes introducir todos los .c que quieras compilar (libtmp.c y el fichero con la funcion ppal).
En HeaderFiles deberás incluir todas las librerías externas que quieras usar (libtmp.h).
Una vez hecho esto el compilador ya sabe donde se encuentra cada fichero y no dará problemas.
Una solución a este problema es que cuando crees una librería y la quieras linkar desde otro proyecto al hacer el include añadas la ruta completa del fichero:
#include "c:\\mis documentos\archivos\libreria.h"
Las barras están duplicadas debido al caracter especial que tiene la contrabarra () cuando está entre comillas en C.
Otra solución es que cuando quieras usar una librería externa la copies junto con su respectivo .C en el directorio del proyecto junto con la función principal que las va a llamar.
Un saludo.
He intentado hace lo que tu me dices y me sigue saliendo lo mismo tengo los tres archivos en el mismo directorio, tanto ppal.c como libmtp.c y libmtp.h y en la ventana de file View tengo esto:
workspace 'modulo1': 1 project(s)
-modulo1 files
-libmtp.c
-modulo1.c (este es el principal)
-external dependencies (esto es una carpeta)
-libmtp.h
yo he añadido el libmtp.c donde te he puesto porque creo que eso era lo que me decias pero siguen saliendome los mismos errores.
workspace 'modulo1': 1 project(s)
-modulo1 files
-libmtp.c
-modulo1.c (este es el principal)
-external dependencies (esto es una carpeta)
-libmtp.h
yo he añadido el libmtp.c donde te he puesto porque creo que eso era lo que me decias pero siguen saliendome los mismos errores.
