elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problema al linkear mi libreria con codeblocks
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: problema al linkear mi libreria con codeblocks  (Leído 7,449 veces)
Borito30


Desconectado Desconectado

Mensajes: 481


Ver Perfil
problema al linkear mi libreria con codeblocks
« en: 26 Febrero 2017, 22:27 pm »

Hola compilo mi proyecto como una librería en mi caso estoy usando la librería gloox por que lo que obtengo lo siguiente:



cuando la añado a mi proyecto:



La ubicación principal de mi libreria(gloox es la carpeta y se encuentra en el escritorio):



La ubicacion de mis librerías será la siguiente:



Lo que hago es compilar mi librería de forma estatica y añadirla a mi programa principal. Pero cuando incluyo las cabeceras de esta libreria no me las reconoce ni el nombre de espacios gloox que sería:

Código:
using namespace gloox;.

Los include:
Código:
#include <src/client.h>
#include <src/message.h>
#include <src/messagehandler.h>
#include <src/connectionlistener.h>

No reconoce ningun elemento de la librería, me devuelve lo siguiente:

Código:
C:\Users\Androide\Desktop\chat\main.cpp|3|fatal error: gloox/src/client.h: No such file or directory|

¿Puede ser que al hacer una compilación estática cambie la ubicación de mis cabeceras? ¿No añadí mi libreria correctamente o porque no reconoce en este caso debería reconocer la ubicación src/ y dentro tendría todas mis cabeceras.


« Última modificación: 26 Febrero 2017, 22:30 pm por Ragaza » En línea

Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: problema al linkear mi libreria con codeblocks
« Respuesta #1 en: 26 Febrero 2017, 22:40 pm »

hay 2 partes: la compilación y el linkeado. Para la compilación, necesitas las cabeceras, nada más. para el linkeado, solo los ficheros objeto (.a, .o...).
Ese error es de compilado, no es cosa de los objeto.

La ruta en la que están las cabeceras, ¿la has añadido? No es en lo de Link libraries (eso es para los ficheros objeto). Para las cabeceras, tienes que meter la ruta en "Search directories -> Compiler". La ruta de la carpeta en la que están las cabeceras. Si haces include <src/client.h>, entonces metes al ruta en la que se encuentre la carpeta src (aunque normalmente, las cabeceras se copian a una carpeta "includes" al compilar la librería)


En línea

Borito30


Desconectado Desconectado

Mensajes: 481


Ver Perfil
Re: problema al linkear mi libreria con codeblocks
« Respuesta #2 en: 26 Febrero 2017, 23:14 pm »

hay 2 partes: la compilación y el linkeado. Para la compilación, necesitas las cabeceras, nada más. para el linkeado, solo los ficheros objeto (.a, .o...).
Ese error es de compilado, no es cosa de los objeto.

La ruta en la que están las cabeceras, ¿la has añadido? No es en lo de Link libraries (eso es para los ficheros objeto). Para las cabeceras, tienes que meter la ruta en "Search directories -> Compiler". La ruta de la carpeta en la que están las cabeceras. Si haces include <src/client.h>, entonces metes al ruta en la que se encuentre la carpeta src (aunque normalmente, las cabeceras se copian a una carpeta "includes" al compilar la librería)

Vale esque tenía dudas con esto. Dijistes :
Citar
hay 2 partes: la compilación y el linkeado. Para la compilación, necesitas las cabeceras, nada más.
Si añado la librería estática no debería reconocer estas librerías segun la ubicación en que se compilo?

Cuando dices:
Citar
La ruta en la que están las cabeceras, ¿la has añadido? No es en lo de Link libraries (eso es para los ficheros objeto)

En esto tengo dudas porque cuando linkeo en la ventana que te enseñe me aparece .a .so .lib .dylib .bundle por eso pense que no podía meter ficheros objeto los cuales tengo para todas las librerias.

Cuando dices:
Citar
Para las cabeceras, tienes que meter la ruta en "Search directories -> Compiler".

Te refieres a esta?:


Probe a añadir la ruta de la cabeceras y aún así no me las reconoce por defecto. Si pongo la ruta relativa con doble comillas si "".

Vale estaba confundiendo por completo el compilado y el linkeado van por separado. También es que estaba usando un ejemplo desactualizado para mi librería por lo que tenía que actualizarlo con las nuevas funciones total que me hice la picha un lio, lo unico que tengo que decir que si lo hago manualmente vale el compilado tira pero si lo hago incluyendo como comentastes no funciono. Luego preguntarte lo de el linkeado donde tendría que añadir los ficheros .o para que se incluyesen a mi ejecutable. Un saludo y gracias por tu ayuda.
En línea

Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: problema al linkear mi libreria con codeblocks
« Respuesta #3 en: 26 Febrero 2017, 23:24 pm »

En la ruta, no pones gloox/src, sino que pones solo gloox, que es la ruta donde está "src/... .h" (si pones gloox/src, entonces harías include sin el "src/" del principio.

Una vez consigas compilar, veremos los errores de linker que pueda haber (cuando sea un error de linker, lo reconocerás, ya sea porque pone algo de LNK o porque no te marca ninguna línea del código como errónea)

Por cierto, en lo del linker de tu primer mensaje ponia: "../../gloox/libgloox.a". Es una ruta relativa. Te recomendaría poner rutas absolutas.
En línea

Borito30


Desconectado Desconectado

Mensajes: 481


Ver Perfil
Re: problema al linkear mi libreria con codeblocks
« Respuesta #4 en: 27 Febrero 2017, 00:01 am »

En la ruta, no pones gloox/src, sino que pones solo gloox, que es la ruta donde está "src/... .h" (si pones gloox/src, entonces harías include sin el "src/" del principio.

Una vez consigas compilar, veremos los errores de linker que pueda haber (cuando sea un error de linker, lo reconocerás, ya sea porque pone algo de LNK o porque no te marca ninguna línea del código como errónea)

Por cierto, en lo del linker de tu primer mensaje ponia: "../../gloox/libgloox.a". Es una ruta relativa. Te recomendaría poner rutas absolutas.

si pero lo que te quiero decir es que cuando lo pongo con ruta absoluta de mis cabeceras no librería porque aunque la incluya la librería estatica no reconoce mis cabeceras. entonces cuando lo hago es por medio de relativa o absoluta ejemplo

absoluta:
"C:\Users\Androide\Desktop\gloox\src\client.h"

o relativa en mi caso
"gloox\src\client.h"

pero siempre con las dobles comillas y sin configurar nada en codeblocks.

Pero cuando añado la carpeta gloox a search directories no se como encontrar mis cabeceras.

Si lo hago "" con las dobles pues si, pero sin añadir nada en la configuración de codeblocks bueno en principio puedo usar las cabeceras por lo que me basta.

Lo que si no se como despues añadire los .o en que parte para que los añada a mi ejecutable.

Total que esta solucionado. Lo unico que no he consigo hacer lo de la configuracion pero si lo hago a mano si.
« Última modificación: 27 Febrero 2017, 00:10 am por Ragaza » En línea

Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: problema al linkear mi libreria con codeblocks
« Respuesta #5 en: 27 Febrero 2017, 00:12 am »

En search directory, pones la ruta absoluta donde quieres que el compilador busque las librerías.
Por ejemplo, si pones en search "C:/abc", y en el include "includes/lib.h", buscará: "C:/abc/includes/lib.h"
Para el linkeado es casi lo mismo.

Pones el include con comillas funciona, sí, pero preferiblemente, poner la ruta a la librería en search directories y poner solo el nombre de la librería (y sus sub-carpetas si tiene).

Como ejemplo, esto tengo yo en mi Code::Blocks:





En línea

Borito30


Desconectado Desconectado

Mensajes: 481


Ver Perfil
Re: problema al linkear mi libreria con codeblocks
« Respuesta #6 en: 27 Febrero 2017, 00:49 am »

En search directory, pones la ruta absoluta donde quieres que el compilador busque las librerías.
Por ejemplo, si pones en search "C:/abc", y en el include "includes/lib.h", buscará: "C:/abc/includes/lib.h"
Para el linkeado es casi lo mismo.

Pones el include con comillas funciona, sí, pero preferiblemente, poner la ruta a la librería en search directories y poner solo el nombre de la librería (y sus sub-carpetas si tiene).

Como ejemplo, esto tengo yo en mi Code::Blocks:







esque hago eso pero aun asi no funciono por lo que supongo que la librería estará mal y por eso no me incluye las cabeceras por lo que tengo que incluirlas a mano. fijandome me di cuenta que este proyecto el cual estaba intentando usar como libreria en la opcion defines tiene DLL_EXPORT por lo que supongo que solo puede funcionar como dll y no como libreria.
« Última modificación: 27 Febrero 2017, 00:54 am por Ragaza » En línea

Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: problema al linkear mi libreria con codeblocks
« Respuesta #7 en: 27 Febrero 2017, 13:08 pm »

Busca los .h en la carpeta. Si existen, entonces tienes que poderlos incluir. Si es así, dime exactamente en qué ruta están y exactamente qué pones en search directories y en los include.
En línea

Borito30


Desconectado Desconectado

Mensajes: 481


Ver Perfil
Re: problema al linkear mi libreria con codeblocks
« Respuesta #8 en: 27 Febrero 2017, 13:45 pm »

Busca los .h en la carpeta. Si existen, entonces tienes que poderlos incluir. Si es así, dime exactamente en qué ruta están y exactamente qué pones en search directories y en los include.
Primero tengo una cuestión yo compilo esta librería como estatica que sería la siguiente:

Pero en #defines tengo DLL_EXPORT eso quiere decir que solo puede funcionar como .dll?

Ya que el search directories no tiene que ver con que la libreria sea estatica o no es solamente para que busque las cabeceras si estoy en lo correcto?
En línea

Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: problema al linkear mi libreria con codeblocks
« Respuesta #9 en: 27 Febrero 2017, 14:36 pm »

Compila la librería, y mira los archivos de salida. Debería haber .h y .o. Si genera DLL, entonces también verás los .dll.

Lo de DLL_EXPORT pues, en las DLL se suele incluir una condición de pre-procesado comprobando si está definido DLL_EXPORT. Con esto quiero decir, que poner ese define no hace anda de por sí. Depende del código. Puedes buscar "DLL_EXPORT" en el código y ver si se está utilizando.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema al linkear .res dentro de una dll
ASM
.:UND3R:. 4 3,753 Último mensaje 3 Octubre 2012, 19:05 pm
por Иōҳ
Duda con la integración de la libreria QT en Codeblocks
Programación C/C++
Blaster 4 3,209 Último mensaje 11 Junio 2013, 17:22 pm
por OmarHack
Como Instalo la libreria SFML en CodeBlocks
Programación C/C++
gibranini 3 2,701 Último mensaje 23 Junio 2014, 03:55 am
por gibranini
Libreria graphics.h para CodeBlocks
Programación C/C++
gibranini 4 8,513 Último mensaje 5 Noviembre 2014, 06:25 am
por gibranini
CODEBLOCKS - cómo instalar librería conio2
Programación General
Novato125 1 4,531 Último mensaje 25 Agosto 2018, 12:46 pm
por DameBanda
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines