Ejemplos detallados de la biblioteca dinámica de Linux generación

  

la biblioteca dinámica puede ahorrar espacio de disco y memoria, facilitar la actualización del programa, aumentar la tasa de aciertos de caché de la CPU, etc. La siguiente serie muestra cómo generar una biblioteca dinámica de Linux a través de ejemplos. Echemos un vistazo.

¿Cuál es la biblioteca dinámica?

Dynamic library, también conocida como dynamic link library English es una DLL, una abreviatura de Dynamic Link Library, DLL es una biblioteca que contiene código y datos que pueden ser utilizados simultáneamente por varios programas, DLL no es un archivo ejecutable. La vinculación dinámica proporciona una forma para que un proceso llame a funciones que no forman parte de su código ejecutable. El código ejecutable de la función se encuentra en una DLL que contiene una o más funciones que se han compilado, vinculado y almacenado por separado del proceso que las utiliza. DLL también ayudan a compartir datos y recursos. Múltiples aplicaciones pueden acceder simultáneamente al contenido de una sola copia DLL en la memoria. Una DLL es una biblioteca de código y datos que pueden ser utilizados simultáneamente por múltiples programas.

I. Breve descripción

La extensión del archivo de biblioteca dinámica en Linux es " .so " (Objeto compartido). Por convención, todos los nombres de archivos de bibliotecas dinámicas tienen el formato libname.so (posiblemente agregando un número de versión al nombre). Por lo tanto, la biblioteca de funciones de hilo se llama libthread.so. El nombre de archivo de la biblioteca estática es libname.a. La forma del nombre de archivo del archivo compartido es libname.sa. El archivo compartido es solo una forma de transición que ayuda a las personas a pasar de la estática a la dinámica.

Xiaobian integra su propia experiencia de aprendizaje y mejor contenido en la red, e introduce el método de generar y vincular archivos de biblioteca dinámicos con ejemplos simples.

Sistema operativo: Ubuntu 14.0.4

Versión GCC: 4.1.3

Segundo, Código de archivo de biblioteca y de prueba

Archivo de biblioteca y archivo de prueba Directorio: /home /test /program /

1. Nombre de archivo de la biblioteca: myLibSrc.c

El código es el siguiente:

/*

filename : myLibSrc.c

* /

#include "stdio.h"

# include " myLibInclude.h "

int

myLibSrcFun () {

printf (" Hay myLibSrcFun () \\ n ");

return 0;

}

2 Archivo: main.c

El código es el siguiente:

/*

filename: main.c

* /

#include Stdio.h "

# include " myLibInclude.h "

int main (intargc, char ** argv) {

printf (" Main function! \\ N " );

//Llame a la función en la biblioteca dinámica cargada

myLibSrcFun ();

Devuelva 0;

}

"strong" 3, archivo de encabezado: myLibInclude.h "/strong"

/*

filename: myLibInclude.h

* /

intmyLibSrcFun (); //Declare la función

Tercero, el método de compilación de la biblioteca dinámica

Compile el archivo de biblioteca myLibSrc.c como se indica a continuación :

El código es el siguiente:

$ gcc myLibSrc.c -shared -o libmyLib.so

o: $ gcc myLibSrc.c -fpic-shared -g -DDEBUG -o libmyLib.so

Si la compilación es exitosa, el archivo de biblioteca dinámica se generará en el directorio /home /test /program /: libmyLib.so

Hay dos puntos para agregar:

A. Para las operaciones de Linux, generalmente se recomienda usar el modo de usuario normal. Si necesita privilegios de superusuario, puede usar sudo o su root para ingresar el cambio de contraseña de usuario root. En vista del aprendizaje y uso individual, y muchas operaciones necesitan usar el usuario root, así que compile directamente debajo del usuario root.

B, el significado de los parámetros al compilar la biblioteca dinámica

-fpic: El módulo de objeto de salida se puede reubicar por método de dirección.

-shared: Especifica que se genere el archivo de biblioteca de enlace dinámico correspondiente para el archivo fuente correspondiente.

Cuarto, el método de prueba de la biblioteca dinámica

Compile el archivo de prueba: main.c

El código es el siguiente:

$ gcc – o app main.c /Inicio /prueba /programa /libmyLib.so

Ejecutar después de una compilación exitosa. /app:

El código es el siguiente:

¡Función principal!

Hay myLibSrcFun ()

Nota:

1. El comando compilado anteriormente $ gcc – o app main.c /home /test /program /El último parámetro de libmyLib.so

es la ruta absoluta que especifica el archivo de biblioteca conectado en particular. La ruta absoluta del archivo de la biblioteca en este ejemplo es /home /test /program /libmyLib.so

Por supuesto, si desea acceder a la ruta del archivo de la biblioteca desde el sistema (generalmente la biblioteca de funciones del sistema se encuentra en el directorio /usr /lib) Si vincula la biblioteca dinámica, puede copiar el archivo de biblioteca generado a /usr /lib y luego vincular:

El código es el siguiente:

$ cp libmyLib.so /usr /lib /libmyLib.so

$ gcc – o app main.c -lmyLib

Aquí, una explicación simple del método de enlace: para $ gcc – o app main.c -lmyLib El último parámetro en el – lmyLib, los argumentos visibles de la línea de comando pasados ​​al compilador de C no menciona la ruta completa de la biblioteca de funciones, ¡ni siquiera menciona el nombre completo del archivo en el directorio de la biblioteca de funciones! De hecho, al compilador se le indica que se vincule a la biblioteca de funciones correspondiente (bajo /usr /lib) de acuerdo con la opción -lmyLib. El nombre de la biblioteca de funciones es libmyLib.so, es decir, las extensiones de las secciones y archivos de la biblioteca están en Se omite, pero se agrega una ‘ l ’ delante.

El ejemplo anterior es un ejemplo de la generación de bibliotecas dinámicas en Linux. A través de estos ejemplos, puede obtener más información sobre cómo se generan las bibliotecas dinámicas de Linux. Espero ayudar a los principiantes.

Copyright © Conocimiento de Windows All Rights Reserved