[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