Generación y uso de bibliotecas estáticas bajo Linux

  
        

A. Conceptos de biblioteca estática

1. Una biblioteca es una colección de archivos de objetos precompilados que se pueden vincular a un programa. El sufijo de biblioteca estática es un almacenamiento especial de archivos de almacenamiento de " .a ".

2. La biblioteca estándar del sistema se puede encontrar en los directorios /usr /lib y /lib. Por ejemplo, en un sistema similar a Unix, la biblioteca de secuencias de orden C generalmente se almacena como el archivo /usr/lib/libm.a. El prototipo de la función en esta biblioteca se declara en el archivo de encabezado /usr/include/math.h.

La biblioteca estándar 3.C se almacena como /usr/lib/libc.a, que contiene funciones especificadas por el estándar ANS1 /ISO, como printf. Para cada programa de C, libc.a está vinculado de forma predeterminada.

4. Un ejemplo:

Llame a la función sin en una biblioteca matemática libm.a en el programa tiger.c.

 # incluye < stdio.h > # incluye < math.h > int main () {double x = 2.0; double y = sin (x); printf (" el resultado:% f \\ n " , y); return 0;} 


Si usa gcc tiger.c directamente, recibirá un error:

referencia no definida a ‘ sin ’;

1 > La función sin () no está definida en el programa ni en la biblioteca predeterminada ’ libc.a ’ a menos que se especifique, el compilador no enlazará ’ libm.a ’.

2 > Para que el compilador vincule sin () con el programa principal ‘ test.c ’, debe proporcionar la biblioteca matemática ’ libm.a ’.

3 > Cómo utilizar:

gcc tiger.c /usr/lib/libm.a -o tiger

Luego puedes compilarlo. Para evitar especificar rutas largas en la línea de comandos, el compilador proporciona una opción rápida para la biblioteca vinculada "ld"; - l ". Por lo tanto, puede usar el siguiente método:

gcc tiger.c -lm – o tiger

Nota: La opción -lNAME usa el vinculador para intentar vincular el archivo de biblioteca libNAME.a en el directorio de bibliotecas del sistema. .


2. Genere y use bibliotecas estáticas

1. Las bibliotecas estáticas son una colección de archivos obj, generalmente las bibliotecas estáticas están marcadas con el sufijo " .a ". La biblioteca estática es generada por el programa ar.

2. La ventaja de la biblioteca estática es que puede volver a vincular el programa sin volver a compilar el código de la biblioteca. Este método ahorra el tiempo del proceso de compilación (al compilar programas grandes, requiere un costo Durante mucho tiempo). Otra ventaja de las bibliotecas estáticas es que los desarrolladores pueden proporcionar archivos de biblioteca a las personas que utilizan, sin la necesidad de un código fuente abierto, que es un método común utilizado por los proveedores de funciones de biblioteca.

3. Use un ejemplo para entender cómo generar bibliotecas estáticas y usar bibliotecas estáticas.

Primero genere bibliotecas estáticas

1 > Hay tres archivos en la carpeta de prueba: main .c, tiger.c, tiger.h;

a. El contenido del archivo main.c:

 # include < stdio.h > # include " tiger.h " //Note Incluya este archivo, no solo vincule el archivo .a con int main (void) {printf (" sum =% d \\ n ", add (3,5)); return 0;} 

b.tiger Qué hay en el archivo .h:

 #ifndef __TIGER __ # define __TIGER__int add (int a, int b); # endif 

Contenido en el archivo c.tiger.c

 int add (int a, int b) {return a + b;} 

2 > El paso más básico para crear una biblioteca estática es generar el archivo de destino tiger.o

gcc -o tiger.o -c tiger.c

3> Luego genere la biblioteca estática libadd.a:

ar -rcs libadd.a tiger.o

En segundo lugar use la biblioteca estática

1 > El comando Gcc con el archivo de la biblioteca es correcto

gcc -o main main.c libadd.a

2 > También puede usar el comando " -l nombre de la biblioteca " Aceptar, el nombre de biblioteca no contiene las bibliotecas de cuerda y extensiones de la biblioteca.

gcc -o main main.c -ladd

Después de ejecutar el comando anterior, el sistema devuelve:

No se puede encontrar – ladd

Explicación: El comando anterior buscará la biblioteca de funciones de adición en la ruta predeterminada del sistema Xi'an y la vinculará al programa de destino que se generará. El sistema solicita que no se encuentre el archivo de biblioteca. Esto se debe a que la función de biblioteca de agregar no se encuentra en la ruta de búsqueda predeterminada del sistema. Tenemos que pensar en la ruta de la función de biblioteca especificada. Por ejemplo, el archivo de biblioteca y el archivo compilado actual están en el mismo directorio: gcc .c -L ./-ladd

El sistema puede generar archivos ejecutables normalmente.

Descripción:

Al usar la opción -l, el nombre de destino de la opción -o debe estar antes del nombre de biblioteca del enlace -l, de lo contrario, gcc pensará que -l es el objetivo de la compilación y se produce un error.

Copyright © Conocimiento de Windows All Rights Reserved