Red de conocimiento informático - Problemas con los teléfonos móviles - Los diferentes efectos de la creación de bandas en archivos de biblioteca dinámicos y estáticos

Los diferentes efectos de la creación de bandas en archivos de biblioteca dinámicos y estáticos

Para utilizar diferentes versiones de bibliotecas en el mismo sistema, puede agregar el número de versión como sufijo después del nombre del archivo de la biblioteca, por ejemplo: libhello.so.1.0, porque la conexión del programa usa el .so sufijo de archivo de forma predeterminada. Por lo tanto, para utilizar estas bibliotecas, normalmente es necesario crear un enlace simbólico.

ln -s libhello.so.1.0 libhello.so.1

ln -s libhello.so.1 libhello.so

Bibliotecas dinámicas y estáticas diferencia:

Cuando se utiliza una biblioteca estática, el vinculador encontrará las funciones que necesita el programa y luego las copiará en el archivo ejecutable. Una vez que se haya completado la copia, una vez que la conexión sea exitosa, la biblioteca estática. Ya no es necesario. Sin embargo, este no es el caso de las bibliotecas dinámicas. Las bibliotecas dinámicas dejarán una marca en el archivo ejecutable, lo que indica que la biblioteca debe cargarse primero al ejecutar el programa. Dado que las bibliotecas dinámicas pueden ahorrar espacio, la operación predeterminada de vinculación en Linux es vincularse primero a la biblioteca dinámica, es decir, si existen tanto la biblioteca estática como la biblioteca dinámica, si no se especifica, la biblioteca dinámica se vinculará

Métodos para compilar y generar las dos bibliotecas:

El primer paso es. para compilar. El código fuente se compila en el código de destino. Tome el siguiente código hello.c como ejemplo para generar la biblioteca hello:

/* hello.c */

#. incluir

void decir hola()

{

printf("hola, mundo\n");

}

Utilice gcc para compilar este archivo. Puede utilizar cualquier parámetro de compilación completo al compilar, como usar -g para agregar código de depuración, etc.

gcc -c hello.c -o hello.o

1.Ar cqs.libhello.a hello.o

2. Enlace a biblioteca dinámica

La generación de biblioteca dinámica se realiza a través de gcc. múltiples versiones, el número de versión generalmente se especifica:

$gcc -shared -Wl, -soname, libhello.so.1

3.-o libhello.so.1.0 hola. o

Además se crearán dos enlaces simbólicos:

$ln -s libhello.so.1.0 libhello.so.1

$ln -s libhello .so.1 libhello.so

Esto genera una biblioteca de enlaces dinámicos libhello. Lo más importante es pasar el parámetro gcc -shared para generar una biblioteca de enlaces dinámicos en lugar de un programa ejecutable ordinario. /p>

-Wl indica. Un parámetro -soname, libhello.so.1, se pasará directamente al vinculador ld para su procesamiento. De hecho, cada biblioteca tiene un soname, y cuando el vinculador encuentra dicho nombre en. la biblioteca que está buscando, está vinculada. El programa incrustará el nombre de sonido en el archivo binario agregado en lugar del nombre de archivo real del archivo en ejecución. Durante la ejecución del programa, el programa buscará archivos con el nombre de sonido. .B