[Jderobot-dev] Problema portando JDErobot de Autotools a CMake
Mikel Gonzalez Baile
m.gonzalezbai en gmail.com
Mie Mar 7 10:26:31 CET 2012
Hola a todos,
primero gracias por la ayuda. He probado a lanzar la cadena de compilaci�n
de nuevo, solo que esta vez en lugar de generar la librer�a din�mica de
jderobotice, generarla est�tica para que me diese el problema durante su
enlazado.
Pues de esta forma ning�n problema, se me genera la librer�a (compilada y
enlazada) y durante la compilaci�n posterior de introrob no hay ning�n
problema tampoco, gener�ndose el ejecutable y todo correcto.
�Cu�ndo se trata de librer�as din�micas hay que tener en cuenta alg�n
detalle "extra"? Con esto descarto el posible fallo de no indicar bien al
enlazador donde buscar cabeceras y librer�as ya que entiendo que sino
tampoco se podr�a haber generado bien de forma est�tica, o me equivoco?
Un saludo y gracias de nuevo.
Mikel.
2012/3/7 JoseMaria <josemaria.plaza en gmail.com>
> Hola Maikel,
>
> desconozco la sintaxis de CMake, pero es claramente un problema de
> enlazado, como dice Redo. Al generar el ejecutable de tu componente
> introrob �ste depende de libjderobotice, y esta biblioteca depende de la
> biblioteca Gearbox. Como no encuentra la biblioteca Gearbox tienes
> s�mbolos sin resolver.
>
> Libjderobotice depende de la biblioteca gearbox, por ejemplo en
> src/libs/jderobotice/context.cpp aparece esta inclusi�n:
> #include <gbxsickacfr/gbxiceutilacfr/threadutils.h>
> Al generar la biblioteca libjderobotice te compila sin problemas, esto
> significa que encuentra bien las cabeceras de la biblioteca GearBox.
>
> Si estuvieras generando la versi�n est�tica de la biblioteca
> libjderobotice (libjderobotice.a) entonces te dar�a fallo de enlazado
> (el mismo que te aparece al enlazar para generar el ejecutable
> introrob), porque en ese caso s� tiene que resolver todos los s�mbolos
> en ese momento.
>
> Como est�s generando la versi�n din�mica de la biblioteca libjderobotice
> (libjderobotice.so) entonces no tiene que enganchar en ese momento todos
> los s�mbolos de los que esta misma biblioteca depende (por ejemplo los
> de gearbox), conf�a en que esto lo resuelva el enlazador din�mico m�s
> adelante.
>
> Y eso parece que es lo que est� fallando cuando quieres generar el
> ejecutable introrob, que en ese punto tiene que resolver todos los
> s�mbolos de los que depende introrob (incluyendo los de libjderobotice,
> gearbox y otros) y no encuentra los de GearBox. Prueba a incorporar, via
> CMake al enlazar para generar introrob, los directorios donde est� la
> biblioteca GearBox, para que el enlazador los encuentre.
>
> Espero que sirva. �nimo,
>
> JoseMaria
> On Wed, 2012-03-07 at 07:16 +0100, redouane kachach wrote:
> > No tengo ni idea del problema que te esta saliendo ... parece ser un
> > problema de linkado. Los simbolos que dice que faltan son de alguna
> > componente de gearbox? ( empiezan con gbxiceutilacfr:: ) .. en este
> > caso yo creo que lo que puedes hacer es comparar los simbolos de la
> > bibioteca "buena" con la mala ... para ello te podrian servir los
> > comandos "nm" y el comando "c++filt" este �ltimo traduce los simbolos
> > "raros" que saca el "nm" a una sintaxis m�s legible que coincide con
> > los nombres de los metodos ..
> >
> >
> > Saludos,
> > Redo.
> >
> > 2012/3/6 Mikel Gonzalez Baile <m.gonzalezbai en gmail.com>
> > Hola a todos,
> >
> >
> >
> >
> >
> > estoy portando la cadena de compilaci�n de JDErobot de la
> > herramienta Autotools a CMake y me estoy encontrando con un
> > problema a la hora de generar la librer�a "jderobotice" a
> > partir de los ficheros que hay en el repositorio oficial.
> >
> >
> > Os dejo el fichero que utilizo para generar dicha librer�a
> > comentando un poco por si alguien no conoce la sintaxis de
> > CMake:
> >
> >
> > include_directories(/usr/include/gearbox)
> > add_library (jderobotice SHARED component.cpp context.cpp
> > application.cpp componentthread.cpp componentthread.h
> > statusImpl.h tracerImpl.h catchutils.cpp subsystemthread.cpp
> > interfaceconnect.cpp component.h context.h application.h
> > exceptions.h catchutils.h subsystemthread.h interfaceconnect.h
> > jderobotice.h) # Crea la librer�a din�mica a partir de las
> > cabeceras y fuentes
> >
> >
> > TARGET_LINK_LIBRARIES(jderobotice ${ice_LIBRARY_DIRS}) #
> > Reglas para el enlazador
> > TARGET_LINK_LIBRARIES(/usr/lib/gearbox/libGbxUtilAcfr.so)
> > TARGET_LINK_LIBRARIES(/usr/lib/gearbox/libGbxIceUtilAcfr.so)
> >
> >
> > El caso es que la librer�a se genera bien, pero cuando la uso
> > para compilar un componente, por ejemplo Introrob, me sale el
> > siguiente error:
> >
> >
> >
> /home/mikel/Dropbox/Universidad/PFC/trunk/CMAKE_jderobot/src/libs/jderobotice/libjderobotice.so:
> undefined reference to `VTT for gbxiceutilacfr::SafeThread'
> >
> /home/mikel/Dropbox/Universidad/PFC/trunk/CMAKE_jderobot/src/libs/jderobotice/libjderobotice.so:
> undefined reference to `vtable for gbxutilacfr::TrivialTracer'
> >
> /home/mikel/Dropbox/Universidad/PFC/trunk/CMAKE_jderobot/src/libs/jderobotice/libjderobotice.so:
> undefined reference to `typeinfo for gbxutilacfr::TrivialTracer'
> >
> /home/mikel/Dropbox/Universidad/PFC/trunk/CMAKE_jderobot/src/libs/jderobotice/libjderobotice.so:
> undefined reference to
> `gbxutilacfr::TrivialStatus::infrastructureFinalising()'
> >
> >
> > (omito el resto de la traza ya que es m�s de lo mismo)
> >
> >
> > Decir que si utilizo la librer�a jderobotice que se instala
> > por medio del paquete de JDErobot no hay ning�n problema, con
> > lo que entiendo que el problema est� si utilizo la que genero
> > yo por medio de mi fichero.
> >
> >
> > Alguna idea?
> >
> >
> > Un saludo y gracias!
> >
> >
> > Mikel.
> >
> > _______________________________________________
> > Jde-developers mailing list
> > Jde-developers en gsyc.es
> >
> http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers
> >
> >
> >
> > _______________________________________________
> > Jde-developers mailing list
> > Jde-developers en gsyc.es
> > http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers
>
> --
> http://gsyc.es/jmplaza
> Universidad Rey Juan Carlos
>
>
>
------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://gsyc.escet.urjc.es/pipermail/jde-developers/attachments/20120307/b6e2e0bd/attachment.htm
More information about the Jde-developers
mailing list