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

JoseMaria jmplaza en gsyc.es
Vie Mar 6 10:53:58 CET 2009


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|
> 
-- 
http://gsyc.es/jmplaza 
Universidad Rey Juan Carlos




More information about the Jde-developers mailing list