El CÓMO de la biblioteca compartida explica la mayoría de los mecanismos involucrados, y el manual del cargador dinámico entra en más detalles. Cada variante de Unix tiene su propio camino, pero la mayoría usa el mismo formato ejecutable ( ELF ) y tiene vinculadores dinámicos similares (derivados de Solaris). A continuación resumiré el comportamiento común con un enfoque en Linux; Consulte los manuales de su sistema para ver la historia completa.
En pocas palabras, cuando busca una biblioteca dinámica ( .soarchivo), el enlazador intenta:
- directorios listados en la
LD_LIBRARY_PATHvariable de entorno ( DYLD_LIBRARY_PATHen OSX);
- directorios listados en el rpath del ejecutable ;
- directorios en la ruta de búsqueda del sistema, que (al menos en Linux) consiste en las entradas en
/etc/ld.so.confmás /liby /usr/lib.
El rpath se almacena en el archivo ejecutable (es el DT_RPATHo DT_RUNPATHatributo dinámico). Puede contener rutas absolutas o rutas que comiencen $ORIGINpor indicar una ruta relativa a la ubicación del ejecutable (por ejemplo, si el ejecutable está dentro /opt/myapp/biny su rpath está $ORIGIN/../lib:$ORIGIN/../pluginsentonces, el enlazador dinámico buscará /opt/myapp/liby /opt/myapp/plugins). La ruta normalmente se determina cuando se compila el ejecutable, con la -rpathopción de ld, pero puede cambiarlo después con chrpath.
En el escenario que usted describe, si usted es el desarrollador o con el empaquetador de la aplicación y tiene la intención de que sea instalado en una …/bin, …/libestructura, y luego enlazar con -rpath='$ORIGIN/../lib'. Si está instalando un binario precompilado en su sistema, coloque la biblioteca en un directorio en la ruta de búsqueda ( /usr/local/libsi es el administrador del sistema, de lo contrario, un directorio al que agregará $LD_LIBRARY_PATH), o intente chrpath.
/lib64y/usr/lib64se utilizan para 64 binarios bits y/liby/usr/libse utilizan para 32 binarios bits.