[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