[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