Tutoriales

Cómo crear y compilar una biblioteca estática en Linux

Resumen: este artículo presenta la comprensión entre bibliotecas estáticas y bibliotecas dinámicas, y luego demuestra cómo los usuarios pueden crear bibliotecas estáticas en Linux con la ayuda del comando ar de Linux.

en un proceso de compilación C programa, el código objeto suele ser el resultado final de un tiempo de ejecución del compilador exitoso. Posteriormente, se invoca al enlazador para que el código de la función de la biblioteca esté disponible para el programa del usuario. El enlazador logra esto haciendo que una copia del código de función de la biblioteca esté disponible para el código de objeto del usuario o usando el código de función de la biblioteca en tiempo de ejecución.

Las bibliotecas estáticas nacen cuando el enlazador crea copias de estos códigos de función de biblioteca reutilizables y los pasa/utiliza en el archivo de programa ejecutable.Se llama biblioteca estática Porque las bibliotecas y/o los archivos de biblioteca están vinculados estáticamente. Las bibliotecas estáticas en Linux son creadas por '.a' extensión de archivo.

Características de las bibliotecas estáticas

Antes de crear una biblioteca estática en Linux, debemos tener en cuenta las siguientes características ventajosas:

  • Tamaño reducido – Son de menor tamaño en comparación con las bibliotecas compartidas, lo que beneficia a los sistemas con espacio de almacenamiento limitado.
  • desempeño mejorado – En tiempo de ejecución, las bibliotecas compartidas se asocian con la sobrecarga de carga (seguimiento de ubicaciones de bibliotecas compartidas, verificación de sus versiones y asignación de ellas a la memoria para acceso a programas ejecutables). Con las bibliotecas estáticas, todo el código y los datos necesarios están fácilmente disponibles para los programas ejecutables.
  • Portabilidad mejorada – Los ejecutables vinculados de bibliotecas estáticas son fáciles de implementar y ejecutar porque no dependen de bibliotecas o entornos de tiempo de ejecución externos. Entonces, a diferencia de las bibliotecas compartidas, funcionan en diferentes sistemas.
  • Mejorar la estabilidad – La estabilidad del programa ejecutable puede mejorar porque se incluye con la biblioteca estática, lo que evita que la biblioteca se modifique o actualice en diferentes entornos del sistema (una causa clave de los problemas de compatibilidad).

Crear una biblioteca estática en Linux

Completaremos la creación de la biblioteca estática con los siguientes pasos:

Paso 1: Crea el archivo C

El primer paso es crear un C Un archivo que contiene todas las funciones de biblioteca requeridas.

$ nano mylibrary.c
OR
$ vi mylibrary.c

Para simplificar, usaremos el siguiente código:

/* Filename: mylibrary.c */
#include 
void task(void)
{
printf("task() called from a static library");
}

Paso 2: Cree el archivo de encabezado de la biblioteca

El siguiente paso es crear los archivos de encabezado de la biblioteca:

$ nano mylibrary.h
OR
$ vi mylibrary.h

El código utilizado es:

/* Filename: mylibrary.h */
void task(void);

Paso 3: Crear el archivo de objeto

El siguiente paso es compilar los archivos de biblioteca anteriores y crear archivos de objetos mi biblioteca usa uno CCG traductor

$ gcc -c mylibrary.c -o mylibrary.o
Compilar archivos de biblioteca en Linux

este -c bandera para compilar la biblioteca C y -o marca para crear un objeto de biblioteca. Puede crear múltiples objetos de biblioteca a partir de diferentes archivos C.

Paso 4: crea una biblioteca estática

Una vez que tenga la cantidad deseada de objetos de biblioteca, puede proceder a crear una biblioteca estática.Aquí tomaremos prestada la funcionalidad de Linux Ordenar.

$ ar rcs mylibrary.a mylibrary.o

El comando anterior crea un archivo llamado mylibrary.aTambién puede incluir varios objetos de biblioteca utilizando el siguiente formato de comando:

$ ar rcs mylibrary.a lib1.o lib2.o lib3.o … 
Crear una biblioteca estática en Linux
Crear una biblioteca estática en Linux

este r opción para crear un archivo de los archivos de objetos de biblioteca proporcionados, c opción para iniciar el proceso de archivo y s opción para crear un índice (tabla de símbolos) del archivo.

Creado archivo de biblioteca estática (mi biblioteca.a) ahora es portátil y está listo para usar.

Cómo usar bibliotecas estáticas en Linux

Para demostrar el uso de esta biblioteca estática, usemos un C documento.

$ nano driver.c
Or
$ vi driver.c

Agregue la función principal con el siguiente código:

/* filename: driver.c */
#include "mylibrary.h"
void main()
{
task();
}

Crear un objeto de biblioteca a partir de este C documento:

$ gcc -c driver.c -o driver.o
Crear objetos de biblioteca
Crear objetos de biblioteca

Ahora usaremos el objeto de biblioteca generado para crear y vincular el controlador a nuestra biblioteca estática.

$ gcc -o driver driver.o -L. -l:mylibrary.a

este -L. apuntar a la ubicación de la biblioteca estática, es decir, la carpeta actual y -l:mylibrary.a Cree un vínculo estático entre la biblioteca estática y el controlador.

Ahora podemos probar la ejecución de este controlador:

$ ./driver
programa de prueba de manejo
programa de prueba de manejo

producción»task() llamado desde una biblioteca estática» del archivo C que creamos anteriormente, confirmando que el controlador y la biblioteca estática están vinculados estáticamente.

Modificar la biblioteca C estática

Consulte los pasos anteriores que conducen a la creación de la biblioteca estática (mi biblioteca.a), podemos concluir que la creación de una biblioteca estática solo requiere la presencia de un archivo de objeto válido (objeto de biblioteca). Por lo tanto, podemos redefinir una biblioteca estática como una composición de objetos de biblioteca.

Ver el contenido de la biblioteca estática

Supongamos que queremos mostrar todos los objetos de biblioteca que componen una biblioteca estática, usaremos comando ar:

$ ar t mylibrary.a
or
$ ar tv mylibrary.a 
Ver contenido de la biblioteca estática
Ver contenido de la biblioteca estática

este -t Las opciones de comando enumeran todos los archivos de objetos existentes y -v Se utiliza para la visualización detallada y proporciona una vista previa detallada, incluidos los atributos del archivo, como el propietario, el grupo, la marca de tiempo y los permisos.

Extraer objetos de biblioteca de bibliotecas estáticas

Si necesita extraer e inspeccionar objetos de biblioteca de una biblioteca estática, utilice comando ar opciones xTambién podemos combinar el comando con la opción verbose (v) Se utiliza para ejecutar comandos de forma interactiva.

El siguiente comando extrae todos los objetos de biblioteca disponibles.

$ ar xv mylibrary.a

El siguiente comando extrae un solo objeto de biblioteca especificado.

$ ar xv mylibrary.a mylibrary.o 

El siguiente comando extrae varios objetos de biblioteca especificados.

$ ar xv mylibrary.a lib1.o lib2.o lib3.o

Agregar objeto de biblioteca a la biblioteca estática

Asumiendo una biblioteca estática mi biblioteca.a Si necesita acomodar objetos de biblioteca adicionales, utilizaremos Arkansas opciones de comando rIncluso podemos combinar esto con la opción detallada.

Este comando agrega un solo objeto de biblioteca especificado a una biblioteca estática

$ ar rv mylibrary.a mylibrary.o 

Este comando agrega varios objetos de biblioteca especificados a la biblioteca estática.

$ ar rv mylibrary.a lib1.o lib2.o lib3.o

Luego vea el contenido de la biblioteca estática para confirmar que se ha agregado el objeto de biblioteca seleccionado.

$ ar tv mylibrary.a 

Eliminar objeto de biblioteca de la biblioteca estática

Si desea eliminar uno o varios objetos de biblioteca de una biblioteca estática, utilice Arkansas opciones de comando dÚselo con la opción detallada para ver cómo se eliminan los archivos de objetos de biblioteca.

Este comando elimina un solo objeto de biblioteca especificado de una biblioteca estática

$ ar dv mylibrary.a mylibrary.o 

Este comando elimina varios objetos de biblioteca especificados de la biblioteca estática.

$ ar dv mylibrary.a lib1.o lib2.o lib3.o
obtener conclusión

Ventajas clave asociadas con biblioteca estática es su capacidad para acelerar el proceso de ejecución del programa. Sin embargo, si se realizan cambios en la biblioteca estática, el usuario debe volver a compilar el programa principal cada vez para que los cambios surtan efecto.

Dicho esto, ahora puede utilizar el concepto de bibliotecas estáticas en sus proyectos Linux actuales y futuros.

LEER  Uso de instrucciones condicionales When en Ansible Playbooks

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba