error de libreria?

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: akodo, maiku

Responder
Avatar de Usuario
vampir
Forista Distinguido
Forista Distinguido
Mensajes: 1031
Registrado: Mar Nov 21, 2006 8:00 am
Ubicación: Mi casa, Sant marçal, marratxí, mallorca, baleares, españa, europa, el mundo, planeta solar...
Contactar:

error de libreria?

Mensaje por vampir » Dom Ago 30, 2009 10:25 pm

bueno, he cogido un programa que esta para windows, pero se ofrece el codigo fuente, tonces lo e pillado, lo he intentado compilar, y me faltaba una libreria, como ponia quien abia hecho la libreria y sabia cual era, tambien me la he descargado (tengo el archivo .c y el archivo .h)

bueno, voy a compilar, gcc programa.c, ya no me dice que falta la libreria (esta en el mismo directorio que el programa) y me saltan muchas lineas como esta:
/tmp/cc2isERj.o: In function `get_app_size':
wadpacker-VERSION_0.00007.c:(.text+0x1e3): undefined reference to `be16'
wadpacker-VERSION_0.00007.c:(.text+0x20f): undefined reference to `be64'
y en la libreria (en el archivo .h) esta esto:
u16 be16(const u8 *p);
u32 be32(const u8 *p);
u64 be64(const u8 *p);
u64 be34(const u8 *p);

soy nuevo en C, y no se a que se debe este error, y acudo al consejo de sabios

un saludo, y gracias por contestar
linux user #439128
DebianSqueeze
http://www.acarrasco.es

Proyecto:
http://alejandria.host56.com

Código: Seleccionar todo

No sé juntar "informática" y "legal" en una misma palabra....
yo sí: LINUX
Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: error de libreria?

Mensaje por akodo » Lun Ago 31, 2009 1:19 am

El .h NO es una librería. Las extensiones comunes de libreías son .a para librerías estáticas (su "código" se añade al ejecutable) y .so para las dinámicas (el "código" es compartido).

Lo que contiene el .h son las declaraciones de las funciones que se utilizan, pero no suele contener ningún código.

Si tienes la "librería" (más bien, su código fuente) lo que tienes que hacer es compilar la librería conjuntamente con tu programa:

Código: Seleccionar todo

gcc programa.c librería.c
El error que te sale es debido a que, a la hora de crear el ejecutable, no te encuentra el código de las funciones, en este caso be16 y be64, porque en el archivo programa.c no las tendrás (ni deberías tenerlas). Al compilar conjuntamente 2 archivos (o más) lo que hace el gcc es adjuntar el código de todos los archivos y crear un único ejecutable. No estoy muy seguro, pero creo que la única restricción que hay es que sólo puede haber un main() (no lo he probado, pero resulta lógico que sólo haya un punto de entrada al programa, y que se considere al resto funciones secundarias).
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])
Avatar de Usuario
vampir
Forista Distinguido
Forista Distinguido
Mensajes: 1031
Registrado: Mar Nov 21, 2006 8:00 am
Ubicación: Mi casa, Sant marçal, marratxí, mallorca, baleares, españa, europa, el mundo, planeta solar...
Contactar:

Re: error de libreria?

Mensaje por vampir » Mar Sep 01, 2009 1:32 am

cuando hacer referencia a una libreria como

carpeta/libreria.h

como se pone en la linea de comandos para que la coja?
linux user #439128
DebianSqueeze
http://www.acarrasco.es

Proyecto:
http://alejandria.host56.com

Código: Seleccionar todo

No sé juntar "informática" y "legal" en una misma palabra....
yo sí: LINUX
Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: error de libreria?

Mensaje por akodo » Mar Sep 01, 2009 2:45 pm

La inclusión del .h a tu código te lo hace automáticamente el compilador. Éste te busca los archivos (generalmente) en /include /usr/include y creo que en /usr/local/include.
No es necesario que le digas al compilador nada especial.

De todas formas, insisto una vez más en que el .h NO tiene por qué contener código.
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])
Avatar de Usuario
vampir
Forista Distinguido
Forista Distinguido
Mensajes: 1031
Registrado: Mar Nov 21, 2006 8:00 am
Ubicación: Mi casa, Sant marçal, marratxí, mallorca, baleares, españa, europa, el mundo, planeta solar...
Contactar:

Re: error de libreria?

Mensaje por vampir » Mar Sep 01, 2009 7:38 pm

akodo escribió:La inclusión del .h a tu código te lo hace automáticamente el compilador. Éste te busca los archivos (generalmente) en /include /usr/include y creo que en /usr/local/include.
No es necesario que le digas al compilador nada especial.

De todas formas, insisto una vez más en que el .h NO tiene por qué contener código.
ya, pero tengo uno que pide las librerias openssl/X
las baje y las instale, pero sigue sin reconocerlo, por eso lo decia
linux user #439128
DebianSqueeze
http://www.acarrasco.es

Proyecto:
http://alejandria.host56.com

Código: Seleccionar todo

No sé juntar "informática" y "legal" en una misma palabra....
yo sí: LINUX
Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: error de libreria?

Mensaje por akodo » Mar Sep 01, 2009 10:56 pm

Supongo que tendrás un archivo como libopenssl.so y libX.so en /usr/lib.
Para enlazar esos archivos (que contendrán código precompilado para utilizar openssl y X) tienes que añadir las opciones -lopenssl y -lX al compilar tu archivo.
Con eso eso lo que haces es decirle al compilador que quieres añadir el código de las bibliotecas libopenssl.so y libX.so, que pueden estar en /lib o /usr/lib (en /usr/local/lib no te los busca por defecto)

De todas formas, si me dices los archivos que tienes en /usr/lib (que es donde supongo que te lo habrá dejado) referentes a esas bibliotecas te lo puedo confirmar.
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje