Bibliotecas en Linux

1. ¿Qué es una biblioteca?

Una biblioteca es una forma binaria de código ejecutable que el sistema operativo puede cargar en la memoria para su ejecución. Consiste en convertir el código fuente en código fuente en formato binario, lo que equivale a cifrado. Otros pueden usar la biblioteca, pero no pueden ver el contenido de la biblioteca.

2. Clasificación, ventajas y desventajas de las bibliotecas.

Biblioteca estática : se agrega al programa de destino antes de ejecutar el programa.
Ventajas:
1. La biblioteca estática está empaquetada en la aplicación y la velocidad de carga es rápida.
2. No es necesario proporcionar la biblioteca estática al publicar el programa. , porque ya está en la aplicación, por lo que es fácil de trasplantar.

Desventajas:
1. Se copia completamente en el archivo ejecutable durante la vinculación y habrá varias copias redundantes si se usa varias veces.
2. La actualización, implementación y publicación son problemáticas.

Biblioteca dinámica : la biblioteca de funciones dinámicas y la biblioteca de funciones compartidas son lo mismo (llamada biblioteca de objetos compartidos en Linux, el sufijo del archivo es .so, en Windows se llama biblioteca de funciones de carga dinámica, el sufijo del archivo es .dll) , dinámicamente cuando el programa se ejecuta (temporalmente) cargado en el programa de destino.
Ventajas:
1. No se copia durante la vinculación. Cuando el programa se está ejecutando, el sistema lo carga dinámicamente en la memoria para las llamadas al programa. El sistema solo lo carga una vez y puede ser compartido por múltiples programas, ahorrando memoria.
2. La actualización del programa es simple porque no hay ningún código fuente de la biblioteca en la aplicación. Después de la actualización, siempre que el nombre de la biblioteca permanezca sin cambios, el nombre de la función y los parámetros permanezcan sin cambios y la implementación esté optimizada, se puede cargar exitosamente.

Desventajas:
1. La velocidad de carga es más lenta que la de las bibliotecas estáticas
2. Los programas de publicación deben proporcionar bibliotecas dinámicas dependientes

3. Producción y uso de bibliotecas

1. Producción y uso de bibliotecas estáticas
(1) Reglas de nomenclatura El
método de denominación de los nombres de archivos de las bibliotecas estáticas es "libxxx.a", agregue "lib" antes del nombre de la biblioteca, utilice ".a" como sufijo y "xxx" es el nombre de la biblioteca estática.

(2) Pasos de producción
Materias primas: código fuente.c o .cpp

Paso 1: Generar el archivo .c en .o, que es el archivo obj.
gcc ac bc -c
Insertar descripción de la imagen aquí
genera el archivo .o obj

Paso 2: empaquete la
materia prima del nombre de la biblioteca estática .o ar rcs
ar rcs libtest.a ao bo
Insertar descripción de la imagen aquí
genera el archivo de biblioteca .a

(3) Uso de la biblioteca
gcc test.c -I ./include -L./lib -lmycalc -o app

Aquí tengo varios archivos colocados en el mismo directorio, por lo que no hay una ruta al archivo de encabezado, solo la ruta a la biblioteca, el -lpthread al final se debe a que mi programa usa múltiples subprocesos y necesita llamar a la biblioteca de subprocesos.

-I (i mayúscula): especifica la ruta al archivo de encabezado, es decir, .h. El valor predeterminado es buscar desde /usr/include

-L: Especifica la ruta de la biblioteca. Por defecto, se busca desde /usr/lib o /usr/local/lib.

-l (L minúscula): especifique el nombre de la biblioteca (elimine lib y .a)

-o: especifica el nombre de la aplicación final generada. De forma predeterminada, el nombre generado en Linux es a.out

2. Producción y uso de bibliotecas dinámicas
(1) Reglas de nomenclatura
Insertar descripción de la imagen aquí

El método de denominación de las bibliotecas dinámicas es similar al de las bibliotecas estáticas: el prefijo es el mismo, que es "lib", y el sufijo se convierte en ".so". Entonces "libxxx.so"

(2) Pasos de producción
Paso 1: generar el archivo fuente en .o. Debe agregar un parámetro fpic
gcc ac bc -c -fpic(fPIC)

La opción -fpic:fpic actúa en la fase de compilación y debe usarse al generar archivos de destino para generar código independiente de la posición.

Insertar descripción de la imagen aquí
Generar archivo .o obj

Paso 2: Empaquetado, gcc -shared ao bo -o libxxx.so
-shared: especifique para generar una biblioteca dinámica
Insertar descripción de la imagen aquí

(3) Uso de la biblioteca
gcc main.c -I ./ -L ./ -l test -o app
Insertar descripción de la imagen aquí
Aquí tengo varios archivos colocados en el mismo directorio, por lo que no hay una ruta al archivo de encabezado, solo la biblioteca. ruta, el -lpthread al final se debe a que mi programa usa subprocesos múltiples y necesita llamar a la biblioteca de subprocesos.

-I (i mayúscula): especifica la ruta al archivo de encabezado, es decir, .h. El valor predeterminado es buscar desde /usr/include

-L: Especifica la ruta de la biblioteca. Por defecto, se busca desde /usr/lib o /usr/local/lib.

-l (L minúscula): especifique el nombre de la biblioteca (elimine lib y .a)

-o: especifica el nombre de la aplicación final generada. De forma predeterminada, el nombre generado en Linux es a.out

Pero en este momento, aparecerá el mensaje No existe tal archivo o directorio, es necesario configurar la variable de entorno y
no se puede cargar la biblioteca dinámica:
Insertar descripción de la imagen aquí

Utilice variables de entorno
para configurar temporalmente: De esta manera, cuando vuelva a abrir una terminal para ejecutar el programa, deberá agregar el entorno nuevamente. En la
terminal:
exporte LD_LIBRARY_PATH = "ruta a la biblioteca dinámica"
Insertar descripción de la imagen aquí
o escriba un script de shell y agréguelo primero. Para las variables de entorno, al ejecutar un programa como:
Insertar descripción de la imagen aquí
y luego ejecutar el script directamente, recuerde agregar un permiso ejecutable al script. Esto puede ahorrarle la molestia de agregar el entorno repetidamente cada vez.

Configuración permanente:
Nivel de usuario:
~/.bashrc, una vez completada la configuración, reinicie el terminal o la fuente ~/.bashrc
Nivel del sistema:
/etc/profile, una vez completada la configuración, reinicie la computadora o la fuente /etc/profile

Supongo que te gusta

Origin blog.csdn.net/m0_68038554/article/details/131851681
Recomendado
Clasificación