Ruta de búsqueda de la biblioteca dinámica de Linux (.so)

  
 

Como todos sabemos, las rutas de búsqueda predeterminadas para las bibliotecas dinámicas de Linux son /lib y /usr /lib. Después de crear la biblioteca dinámica, generalmente se copia en estos dos directorios. Cuando un programa necesita ejecutar una biblioteca dinámica y la biblioteca dinámica no se ha cargado en la memoria, el sistema buscará automáticamente el archivo de la biblioteca dinámica correspondiente en las dos rutas de búsqueda predeterminadas y luego cargará el archivo en la memoria, de modo que el programa Puede usar las funciones en la biblioteca dinámica, así como otros recursos de la biblioteca dinámica. En Linux, la ruta de búsqueda de la biblioteca dinámica se puede especificar de las siguientes tres formas además de la ruta de búsqueda predeterminada.
Método 1: Especifique la ruta de búsqueda de biblioteca dinámica en el archivo de configuración /etc/ld.so.conf.
Puede especificar la ruta de búsqueda para la biblioteca dinámica editando el archivo de configuración /etc/ld.so.conf, que actúa como una ruta de búsqueda de biblioteca dinámica. Después de editar el archivo, debe ejecutar el comando ldconfig para que la configuración modificada tenga efecto. Ilustramos este método mediante el Ejemplo 1.
Ejemplo 1:
Utilizamos el siguiente comando para crear la biblioteca dinámica libpos.so con el programa fuente pos_conf.c (ver programa 1). Para un proceso de creación detallado, consulte [1].
# gcc -c pos_conf.c # gcc -shared -fPCI -o libpos.so pos_conf.o #
#include < stdio.h > void pos () {printf (" /root /test /Conf /lib \\ n ");} Programa 1: pos_conf.c
Luego compile main.c (vea el programa 2) con el siguiente comando para generar el programa objetivo pos.
# gcc -o pos main.c -L. -lpos #
void pos (); int main () {pos (); return 0;} Programa 2: main.c
Luego ponga la biblioteca El archivo se mueve al directorio /root /test /conf /lib.
# mkdir -p /root /test /conf /lib # mv libpos.so /root /test /conf /lib #
Última edición del archivo de configuración /etc/ld.so.conf y adjúntelo a este archivo Una línea " /root /test /conf /lib ".
Ejecutar el programa pos intentar.
# ./pos ./pos: error al cargar bibliotecas compartidas: libpos.so: no se puede abrir el archivo de objeto compartido: no se ha encontrado tal archivo o directorio #
Se produjo un error, el sistema no encontró la biblioteca dinámica libpos.so. Buscando la razón, después de editar el archivo de configuración /etc/ld.so.conf, el comando ldconfig no se ejecutó, por lo que la modificación aún no ha entrado en vigor. Vamos a intentarlo después de ejecutar ldconfig.
# ldconfig # ./pos /root /test /conf /lib #
El programa pos se ejecuta correctamente e imprime el resultado correcto.
Método 2: Especifique la ruta de búsqueda de biblioteca dinámica a través de la variable de entorno LD_LIBRARY_PATH.
La ruta de búsqueda de la biblioteca dinámica también se puede especificar configurando la variable de entorno LD_LIBRARY_PATH. Cuando se especifican varias rutas de búsqueda de bibliotecas dinámicas a través de esta variable de entorno, las rutas se separan con dos puntos ": ". El método se describirá a continuación a través del Ejemplo 2.
Ejemplo 2:
Usamos el siguiente comando para crear la biblioteca dinámica libpos.so con el programa fuente pos_env.c (ver programa 3).
# gcc -c pos_env.c # gcc -shared -fPCI -o libpos.so pos_env.o #
#include < stdio.h > void pos () {printf (" /root /test /Env /lib \\ n ");} Programa 3: pos_env.c
El archivo ejecutable pos para prueba puede usar la posición objetivo del programa obtenida en el Ejemplo 1, y no es necesario compilarlo nuevamente. Debido a que la función pos en pos_conf.c y la función pos prototipo de función en pos_env.c son iguales, y el nombre de la biblioteca dinámica es el mismo, esto es como volver a crear la biblioteca después de modificar la biblioteca dinámica pos. Esta es una de las ventajas de usar una biblioteca dinámica.
Luego mueva la biblioteca dinámica libpos.so al directorio /root /test /conf /lib.
# mkdir -p /root /test /env /lib # mv libpos.so /root /test /env /lib #
Podemos utilizar export para establecer la variable de entorno, después de configurar la variable de entorno Esta variable de entorno es válida en el comando.
Ejemplo:
# export LD_LIBRARY_PATH = /root /test /env /lib #
Pero para la conveniencia de este artículo, otra forma de establecer variables de entorno es agregar variables de entorno antes del comando. La variable de entorno solo es válida para este comando. Cuando se ejecuta el comando, la variable de entorno no es válida. Como el siguiente comando:
# LD_LIBRARY_PATH = /root /test /env /lib ./pos /root /test /env /lib #
La pos del programa se ejecuta correctamente, y el resultado de la impresión es &root; /root /test /Env /lib ", es el resultado de la función pos en el programa pos_env.c. Así que la biblioteca dinámica buscada por el programa pos es /root/test/env/lib/libpos.so.

Copyright © Conocimiento de Windows All Rights Reserved