[Jde-dev] [Jde-users] Problema con enlazado dinámico libreríasJDE

Juan Gonzalez Gomez juan en iearobotics.com
Vie Mar 6 11:31:54 CET 2009


jajjaaj Qué bueno eso de modo "Epi-Blas!" Lo incorporaré a mi repertorio
de explicaciones ;-)

Saludos, Juan

El vie, 06-03-2009 a las 11:21 +0100, Julio Vega escribió:
> Hola de nuevo,
> 
>   bueno, pues resulta que después de X horas (no voy a especificar, para 
> no lastimar aún más mi autoestima), Jose María en 1 minuto se ha 
> percatado que en el fichero "ld.so.conf" las líneas de paths añadidas 
> tenían la sintaxis incorrecta. A modo de "Epi-Blas":
> 
>   BIEN:
> 
>     include /etc/ld.so.conf.d/*.conf
>     /usr/lib/jde-robot
>     /usr/lib/jde-robot/drivers
>     /usr/lib/jde-robot/schemas
>     /usr/lib/jde-robot/services
> 
>   MAL:
> 
>     include /etc/ld.so.conf.d/*.conf
>     include /usr/lib/jde-robot
> 
>   Bueno, mirémoslo por el lado positivo. Ahora sabemos mucho más de 
> librerías dinámicas :)
> 
>   Gracias encarecidamente Jose María,
> 
>   Julio
> 
> Julio Vega wrote:
> >  Hola,
> >
> >  a este paso vamos a ser los másters de las librerías dinámicas :)
> >
> >  Sí, claro, he ejecutado el "ldconfig" tras actualizar el 
> > "ld.so.conf". De hecho es seguramente un problema que no tenga nada 
> > que ver con JDE, sino de alguna piltrafa en mi sistema (aunque está 
> > recién estrenado...). Digo esto, porque ayer pude llegar a la solución 
> > que expuse en el anterior e-mail, tras intentar instalar sin éxito a 
> > priori las librerías CUDA; y le ocurría el mismo problema de enlazado 
> > con sus respectivas dependencias.
> >
> >  Es como si "ldconfig" tuviera un efecto nulo... De hecho, 
> > "LD_DEBUG=all ./esquema.so" muestra cómo efectivamente el enlazador NO 
> > está buscando en los paths añadidos al "ld.so.conf".
> >
> >  Si llego a alguna conclusión lógica ya lo pondré. Mientras, salvo el 
> > paso con el LD_LIBRARY_PATH :)
> >
> >  Saludos,
> >
> >  Julio
> >
> > JoseMaria wrote:
> >> Uhm... En general, no sólo para jde, sino para cualquier aplicación en C
> >> que dependa de bibliotecas, las bibliotecas estáticas se localizan al
> >> generar el ejecutable (compilar-enlazar) y se empotran en él. Las
> >> bibliotecas dinámicas por contra no están empotradas en el ejecutable,
> >> sino que en tiempo de ejecución el enlazador dinámico las encuentra y
> >> las incorpora.
> >>
> >> Al enlazador dinámico (en linux: ld.so) hay que decirle dónde debe ir a
> >> buscar las bibliotecas dinámicas. El cargador/enlazador dinámico busca
> >> las bibliotecas dinámicas en (y en este orden):
> >> 1.- los directorios incluidos en la variable de entorno  LD_LIBRARY_PATH
> >> 2.- los directorios incluidos en /etc/ld.so.cache
> >> 3.- ciertos directorios por defecto como  /lib y /usr/lib.
> >>
> >> Asi que se le puede indicar que busque mediante:
> >> 1.- incluir en la variable de entorno LD_LIBRARY_PATH los directorios
> >> adecuados. Esto depende de la shell concreta. En la bash que utilizo es
> >> con: "export 
> >> LD_LIBRARY_PATH=midirectorio1:midirectorio2:$LD_LIBRARY_PATH.
> >> 2.- /etc/ld.so.cache es un binario, para incluir en él nuevo directorios
> >> hay que especificar en el fichero /etc/ld.so.conf los directorios donde
> >> debe buscar las bibliotecas dinámicas y despues ejecutar ldconfig. Al
> >> ejecutar ldconfig los directorios de /etc/ld.so.conf se incorporan
> >> a /etc/ld.so.cache
> >>
> >> Nuestra aplicación en JDE típicamente consta de varios esquemas,
> >> servicios y drivers. Todos ellos son plugins (bibliotecas dinámicas) que
> >> se cargan en tiempo de ejecución, por ejemplo opencvdemo.so,
> >> graphics_gtk.so, player.so, etc.. Si están en LD_LIBRARY_PATH o
> >> en /etc/ld.so.cache, el enlazador dinámico los encontrará.
> >> Adicionalmente, y esto ya sí depende de nuestro código, hemos
> >> implementando un mecanismo de carga de esquemas, drivers y servicios que
> >> busca los plugins en los directorios que se le especifican a jde en su
> >> fichero de configuración (path XXX:YYY:ZZZ:ggg). De modo que se
> >> localizan y pueden cargar sin estar en LD_LIBRARY_PATH o
> >> en /etc/ld.so.cache, si sí están en alguno de esos directorios
> >> especificados en el fichero de configuración de jde.
> >>
> >> A su vez cada componente (esquema,servicio,driver) puede depender de
> >> otras bibliotecas como progeo, colorspaces, pioneer, etc. Estas
> >> bibliotecas (que son dinámicas) sí deben estar en algún directorio
> >> localizable por el cargador/enlazador dinámico (es decir contenido en
> >> LD_LIBRARY_PATH o en /etc/ld.so.cache). Si alguna referencia a
> >> biblioteca de un esquema no está bien resuelta, es decir, no se
> >> encuentra la biblioteca que lo implementa, el esquema falla al cargarse.
> >>
> >> Para ver de qué bibliotecas depende un ejecutable, un esquema.so o un
> >> driver.so basta ejecutar "ldd esquema.so" y te dice de qué bibliotecas
> >> depende y si puede encontrar cada una de ellas.
> >>
> >> Julio, ¿has ejecutado ldconfig después de modificar /etc/ld.so.conf para
> >> incorporar /usr/lib/jde-robot a los directorios en los que busca en
> >> enlazador dinámico?
> >>
> >> JoseMaria
> >> On Thu, 2009-03-05 at 20:01 +0100, Julio Vega wrote:
> >>  
> >>> Bueno,
> >>>
> >>>   después de varios combates se ha solucionado el asunto. Poniendo 
> >>> el path en la variable de entorno |LD_LIBRARY_PATH, de forma que 
> >>> ||LD_LIBRARY_PATH=/usr/lib/jde-robot y, lo que es más importante, no 
> >>> hay que olvidar hacer el $export LD_LIBRARY_PATH a continuación.
> >>>   Lo todavía extraño es que el enlazador dinámico parece que no mira 
> >>> en el fichero de configuración donde están especificados los paths 
> >>> de búsqueda por defecto del sistema (/etc/ld.so.conf). Por la 
> >>> naturaleza de éste, debería mirar primero en lo que tenga 
> >>> temporalmente en LD_LIBRARY_PATH y después en tal fichero. Pero si 
> >>> no configuro la variable de entorno, nada de nada; además 
> >>> consultando el debug completo (con '$LD_DEBUG=all ./esquema.so') veo 
> >>> perfectamente que no busca!
> >>>
> >>>   Por otro lado, quizás me equivoque, pero creo que ldconfig sólo se 
> >>> usa para localizar librerías cuando compilamos el código en la 
> >>> máquina, y no cuando hacemos la instalación a través de algún 
> >>> binario o similar. Entonces sí tendría sentido este embrollo.
> >>>
> >>>   Seguimos al acecho :) Saludos,
> >>>
> >>>   Julio|
> >>>
> >>>     
> >
> >
> 
> 
-- 
Juan Gonzalez Gomez
Blog: http://www.iearobotics.com/blog/ 
Web : http://www.iearobotics.com/juan



More information about the Jde-developers mailing list