Hola,<div><br></div><div>Redo gracias por esos comandos, me están siendo de gran ayuda :).</div><div><br></div><div>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.</div>
<div><br></div><div>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?</div><div><br></div><div>Un saludo y gracias!</div>
<div><br></div><div>Mikel.<br><br><div class="gmail_quote">2012/3/7 redouane kachach <span dir="ltr">&lt;<a href="mailto:redo.robot@gmail.com">redo.robot@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
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 &quot;Undefined&quot; en la biblioteca dinamica se pueden resolver, para ello las bibliotecas que definen estos simbolos tienen que ser &quot;visibles&quot; por el compilador, esto creo que lo indicas con la opción &quot;-L/path/libreria&quot; y con la &quot;-lnombre_lib&quot; indicas las librerias que quieres utilizar ..<div>



<br></div><div>Para ver que librerias esta abriendo el compilador puedes utilizar el comando &quot;strace&quot; que rastrea todas las llamadas al sistema que hace el proceso y ver que llamadas &quot;open&quot; esta realizando .. con esto puedes ver que bibliotecas intenta abrir a la hora de generar tu ejecutable ..</div>



<div><br></div><div>Saludos,</div><div>Redo.<div><div class="h5"><br><br><div class="gmail_quote">2012/3/7 Mikel Gonzalez Baile <span dir="ltr">&lt;<a href="mailto:m.gonzalezbai@gmail.com" target="_blank">m.gonzalezbai@gmail.com</a>&gt;</span><br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hola a todos,<div><br></div><div>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. </div>




<div><br></div><div>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.</div>




<div><br></div><div>¿Cuándo se trata de librerías dinámicas hay que tener en cuenta algún detalle &quot;extra&quot;? 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?</div>




<div><br></div><div>Un saludo y gracias de nuevo.</div><span><font color="#888888"><div><br></div><div>Mikel.</div></font></span><div><div><div><br></div><div><br></div><div><div>
<br><div class="gmail_quote">2012/3/7 JoseMaria <span dir="ltr">&lt;<a href="mailto:josemaria.plaza@gmail.com" target="_blank">josemaria.plaza@gmail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hola Maikel,<br>
<br>
desconozco la sintaxis de CMake, pero es claramente un problema de<br>
enlazado, como dice Redo. Al generar el ejecutable de tu componente<br>
introrob éste depende de libjderobotice, y esta biblioteca depende de la<br>
biblioteca Gearbox. Como no encuentra la biblioteca Gearbox tienes<br>
símbolos sin resolver.<br>
<br>
Libjderobotice depende de la biblioteca gearbox, por ejemplo en<br>
src/libs/jderobotice/context.cpp aparece esta inclusión:<br>
#include &lt;gbxsickacfr/gbxiceutilacfr/threadutils.h&gt;<br>
Al generar la biblioteca libjderobotice te compila sin problemas, esto<br>
significa que encuentra bien las cabeceras de la biblioteca GearBox.<br>
<br>
Si estuvieras generando la versión estática de la biblioteca<br>
libjderobotice (libjderobotice.a) entonces te daría fallo de enlazado<br>
(el mismo que te aparece al enlazar para generar el ejecutable<br>
introrob), porque en ese caso sí tiene que resolver todos los símbolos<br>
en ese momento.<br>
<br>
Como estás generando la versión dinámica de la biblioteca libjderobotice<br>
(libjderobotice.so) entonces no tiene que enganchar en ese momento todos<br>
los símbolos de los que esta misma biblioteca depende (por ejemplo los<br>
de gearbox), confía en que esto lo resuelva el enlazador dinámico más<br>
adelante.<br>
<br>
Y eso parece que es lo que está fallando cuando quieres generar el<br>
ejecutable introrob, que en ese punto tiene que resolver todos los<br>
símbolos de los que depende introrob (incluyendo los de libjderobotice,<br>
gearbox y otros) y no encuentra los de GearBox. Prueba a incorporar, via<br>
CMake al enlazar para generar introrob, los directorios donde está la<br>
biblioteca GearBox, para que el enlazador los encuentre.<br>
<br>
Espero que sirva. Ánimo,<br>
<br>
JoseMaria<br>
<div>On Wed, 2012-03-07 at 07:16 +0100, redouane kachach wrote:<br>
&gt; No tengo ni idea del problema que te esta saliendo ... parece ser un<br>
&gt; problema de linkado. Los simbolos que dice que faltan son de alguna<br>
&gt; componente de gearbox? ( empiezan con gbxiceutilacfr:: ) .. en este<br>
&gt; caso yo creo que lo que puedes hacer es comparar los simbolos de la<br>
&gt; bibioteca &quot;buena&quot; con la mala ... para ello te podrian servir los<br>
&gt; comandos &quot;nm&quot; y el comando &quot;c++filt&quot; este último traduce los simbolos<br>
&gt; &quot;raros&quot; que saca el &quot;nm&quot; a una sintaxis más legible que coincide con<br>
&gt; los nombres de los metodos ..<br>
&gt;<br>
&gt;<br>
&gt; Saludos,<br>
&gt; Redo.<br>
&gt;<br>
&gt; 2012/3/6 Mikel Gonzalez Baile &lt;<a href="mailto:m.gonzalezbai@gmail.com" target="_blank">m.gonzalezbai@gmail.com</a>&gt;<br>
&gt;         Hola a todos,<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
</div><div><div>&gt;         estoy portando la cadena de compilación de JDErobot de la<br>
&gt;         herramienta Autotools a CMake y me estoy encontrando con un<br>
&gt;         problema a la hora de generar la librería &quot;jderobotice&quot; a<br>
&gt;         partir de los ficheros que hay en el repositorio oficial.<br>
&gt;<br>
&gt;<br>
&gt;         Os dejo el fichero que utilizo para generar dicha librería<br>
&gt;         comentando un poco por si alguien no conoce la sintaxis de<br>
&gt;         CMake:<br>
&gt;<br>
&gt;<br>
&gt;         include_directories(/usr/include/gearbox)<br>
&gt;         add_library (jderobotice SHARED component.cpp context.cpp<br>
&gt;         application.cpp componentthread.cpp componentthread.h<br>
&gt;         statusImpl.h tracerImpl.h catchutils.cpp subsystemthread.cpp<br>
&gt;         interfaceconnect.cpp component.h context.h application.h<br>
&gt;         exceptions.h catchutils.h subsystemthread.h interfaceconnect.h<br>
&gt;         jderobotice.h) # Crea la librería dinámica a partir de las<br>
&gt;         cabeceras y fuentes<br>
&gt;<br>
&gt;<br>
&gt;         TARGET_LINK_LIBRARIES(jderobotice ${ice_LIBRARY_DIRS}) #<br>
&gt;         Reglas para el enlazador<br>
&gt;         TARGET_LINK_LIBRARIES(/usr/lib/gearbox/libGbxUtilAcfr.so)<br>
&gt;         TARGET_LINK_LIBRARIES(/usr/lib/gearbox/libGbxIceUtilAcfr.so)<br>
&gt;<br>
&gt;<br>
&gt;         El caso es que la librería se genera bien, pero cuando la uso<br>
&gt;         para compilar un componente, por ejemplo Introrob, me sale el<br>
&gt;         siguiente error:<br>
&gt;<br>
&gt;<br>
&gt;         /home/mikel/Dropbox/Universidad/PFC/trunk/CMAKE_jderobot/src/libs/jderobotice/libjderobotice.so: undefined reference to `VTT for gbxiceutilacfr::SafeThread&#39;<br>
&gt;         /home/mikel/Dropbox/Universidad/PFC/trunk/CMAKE_jderobot/src/libs/jderobotice/libjderobotice.so: undefined reference to `vtable for gbxutilacfr::TrivialTracer&#39;<br>
&gt;         /home/mikel/Dropbox/Universidad/PFC/trunk/CMAKE_jderobot/src/libs/jderobotice/libjderobotice.so: undefined reference to `typeinfo for gbxutilacfr::TrivialTracer&#39;<br>
&gt;         /home/mikel/Dropbox/Universidad/PFC/trunk/CMAKE_jderobot/src/libs/jderobotice/libjderobotice.so: undefined reference to `gbxutilacfr::TrivialStatus::infrastructureFinalising()&#39;<br>
&gt;<br>
&gt;<br>
&gt;         (omito el resto de la traza ya que es más de lo mismo)<br>
&gt;<br>
&gt;<br>
&gt;         Decir que si utilizo la librería jderobotice que se instala<br>
&gt;         por medio del paquete de JDErobot no hay ningún problema, con<br>
&gt;         lo que entiendo que el problema está si utilizo la que genero<br>
&gt;         yo por medio de mi fichero.<br>
&gt;<br>
&gt;<br>
&gt;         Alguna idea?<br>
&gt;<br>
&gt;<br>
&gt;         Un saludo y gracias!<br>
&gt;<br>
&gt;<br>
&gt;         Mikel.<br>
&gt;<br>
&gt;         _______________________________________________<br>
&gt;         Jde-developers mailing list<br>
&gt;         <a href="mailto:Jde-developers@gsyc.es" target="_blank">Jde-developers@gsyc.es</a><br>
&gt;         <a href="http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers" target="_blank">http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Jde-developers mailing list<br>
&gt; <a href="mailto:Jde-developers@gsyc.es" target="_blank">Jde-developers@gsyc.es</a><br>
&gt; <a href="http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers" target="_blank">http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers</a><br>
<br>
</div></div><span><font color="#888888">--<br>
<a href="http://gsyc.es/jmplaza" target="_blank">http://gsyc.es/jmplaza</a><br>
Universidad Rey Juan Carlos<br>
<br>
<br>
</font></span></blockquote></div><br></div></div>
</div></div></blockquote></div><br></div></div></div>
</blockquote></div><br></div>