[Kde-devel-es] Qtimer y librerias (solucionado)

hacklet hack_let at yahoo.es
Tue May 31 18:16:11 CEST 2005


Hola,

ya he solucionado el tema de las librerías, os lo cuento por si a 
alguien le pasa algo parecido.

Resulta que la librería que yo hice estaba en C y mi programa es en C++, 
por tanto se ve que el compilador usa diferentes tecnicas a la hora de 
llamar a una función en C++ con respecto a C, asi que solo había que 
añadir en el archivo libraptor.h lo siguiente:

#ifdef __cplusplus
extern "C" {
#endif

// declaraciones......


#ifdef __cplusplus
}
#endif

de forma que en mi programa lo incluyo asi: #include "lib/libraptor.h" 
luego con -lraptor y -Ldirectorio_librería funciona tanto para librerías 
estáticas como dinámicas, aunque también si es estática se puede añadir 
directamente el archivo directorio_librería/libraptor.a y funciona.

Saludos
Pablo







Miguel de Benito wrote:

>On Sunday 29 May 2005 13:42, hacklet wrote:
>  
>
>>Hola de nuevo,
>>    
>>
>
>Buenas,
>
>  me temo que esto puede que no te sea de mucha ayuda, pero es lo que se me 
>ocurre...
>
>  
>
>>aqui os pongo como compila con el g++:
>>
>>g++  -o ../bin/qt_program main.o pci7248.o pci7248form.o moc_pci7248.o
>>moc_pci7248form.o   -L/home/let/proyecto/src/lib -L/usr/share/qt3/lib
>>-L/usr/X11R6/lib -lraptor -lqt-mt -lXext -lX11 -lm -lpthread
>>    
>>
>
>  puedes probar el mismo comando g++, pero en vez de -lraptor, poner la 
>librería como un objeto más:
>
>  g++  -o ../bin/qt_program main.o pci7248.o pci7248form.o moc_pci7248.o
>  moc_pci7248form.o  lib/libraptor.a -L/usr/share/qt3/lib 
>  -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm -lpthread
>
>  si esto funciona es que efectivamente la librería contiene lo que 
>necesitas. Esto debería ser así, porque lo que pones en tu cabecera:
>
>  typedef short           I16;
>  typedef unsigned short  U16;
>  I16  Register_Card (U16 CardType, U16 card_num);
>
>y el prototipo de la función devuelto en el error:
>
>  undefined reference to `Register_Card(unsigned short, unsigned short)
>
>concuerdan. De modo que el problema es cómo se enlaza... 
>
>  En teoría, cuando se invoca a ld, para que enlace forzosamente una 
>librería estática se puede usar -Bstatic (o -aarchive) seguido de -lnombre 
>(-lraptor). Luego se puede volver a -Bdynamic (o -ashared) para el resto 
>(esto permite ser selectivo, al contrario que si le pasas -static a g++):
>
>  ld -o ../bin/qt_program main.o pci7248.o pci7248form.o moc_pci7248.o
>  moc_pci7248form.o  -L/home/let/proyecto/src/lib -L/usr/share/qt3/lib 
>  -L/usr/X11R6/lib -Bstatic -lraptor -Bdynamic -lqt-mt -lXext -lX11 -lm
>  -lpthread
>
>  Claro, que como se está invocando a ld indirectamente mediante g++, 
>tendrás que pasarle los parámetros precediéndolos de
>
>  -Wl,[parámetros]
>
>  De todos modos, todo este follón no tiene mucho sentido si sólamente 
>existe un fichero libraptor.a y no además un .so, pues el enlazador debería 
>encontrarlo y determinar automáticamente que debe enlazarlo 
>estáticamente... Mmmm, no sé...
>
>  Intenta urgar entre las opciones de proyecto de QT, y si no siempre puedes 
>intentar compilar tu librería como dinámica y volverlo a intentar. Ya nos 
>contarás.
>
>  Saludos,
>  
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Kde-devel-es mailing list
>Kde-devel-es at kde.org
>https://mail.kde.org/mailman/listinfo/kde-devel-es
>  
>



More information about the Kde-devel-es mailing list