[Jderobot-dev] Problema portando JDErobot de Autotools a CMake

Mikel Gonzalez Baile m.gonzalezbai en gmail.com
Jue Mar 8 01:24:32 CET 2012


Hola,

Redo gracias por esos comandos, me est�n siendo de gran ayuda :).

Otra duda que me ha surgido es, d�nde se encuentran los ficheros para
generar la librer�a libJderobotInterfaces? Estoy mirando por el repositorio
oficial y no encuentro nada con nombre similar, sin embargo se me instal�
por medio del paquete.

Por cierto, aunque todas estas librer�as se instalan por medio del paquete
es necesario generarlas e instalarlas en la cadena de compilaci�n, verdad?

Un saludo y gracias!

Mikel.

2012/3/7 redouane kachach <redo.robot en gmail.com>

> No s� el caso, pero con lo que cuentas suena a que en la primera vez el
> enlazado lo hace bien ya que sino como dice Jose Maria te hubiera fallado
> al generar la estatica. Ahora bien, cuando utilizas la biblioteca dinamica
> generada para compilar el segundo componente ahi algo te falta ya que es
> incapaz de resolver todos los simbolos. Asegurate de que en este paso todos
> los simbolos "Undefined" en la biblioteca dinamica se pueden resolver, para
> ello las bibliotecas que definen estos simbolos tienen que ser "visibles"
> por el compilador, esto creo que lo indicas con la opci�n
> "-L/path/libreria" y con la "-lnombre_lib" indicas las librerias que
> quieres utilizar ..
>
> Para ver que librerias esta abriendo el compilador puedes utilizar el
> comando "strace" que rastrea todas las llamadas al sistema que hace el
> proceso y ver que llamadas "open" esta realizando .. con esto puedes ver
> que bibliotecas intenta abrir a la hora de generar tu ejecutable ..
>
> Saludos,
> Redo.
>
>
> 2012/3/7 Mikel Gonzalez Baile <m.gonzalezbai en gmail.com>
>
>> 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/20120308/0bda601d/attachment-0001.htm 


More information about the Jde-developers mailing list