1, introducción a la biblioteca de funciones de Linux
La biblioteca de funciones se puede considerar como un conjunto de funciones escritas de antemano, que se pueden separar de la función principal, aumentando así el programa. Reutilización del desarrollo. Las bibliotecas de funciones en Linux se pueden usar en tres formas: estática, compartida y dinámica.
1) El código de la biblioteca estática se conecta a la aplicación desarrollada por el desarrollador en el momento de la compilación;
2) y la biblioteca compartida solo se carga cuando el programa comienza a ejecutarse;
3) La biblioteca dinámica también se carga cuando el programa se está ejecutando, pero a diferencia de la biblioteca compartida, la función de biblioteca utilizada por la biblioteca dinámica no se carga en el programa, pero la declaración en el programa necesita usar la función. Sólo cargado. Las bibliotecas dinámicas pueden liberar la memoria utilizada por las bibliotecas dinámicas durante la ejecución del programa, liberando espacio para que otros programas lo utilicen.
Nota:
l Dado que las bibliotecas compartidas y las bibliotecas dinámicas no incluyen el contenido de las funciones de la biblioteca en el programa, solo contienen referencias a las funciones de la biblioteca, por lo que el tamaño del código es relativamente pequeño.
l La mayoría de las bibliotecas disponibles en el sistema se almacenan en /usr /local /lib, /usr /lib, /lib y directorios.
l La mayoría de los archivos de encabezado se encuentran en el directorio /usr /include, /usr /local /include.
l Los archivos de configuración y los comandos de administración de la biblioteca compartida son los siguientes:
/etc/ld.so.conf: la ubicación de búsqueda de la biblioteca compartida.
ldconfig: Herramienta de administración de biblioteca compartida, generalmente ejecuta este comando después de actualizar la biblioteca compartida.
ldd: puede ver las bibliotecas compartidas utilizadas por el ejecutable.
l El nombre del archivo de la biblioteca consta del prefijo lib y el nombre y el sufijo de la biblioteca. Según el tipo de biblioteca, el nombre del sufijo es diferente.
2, la razón principal para el uso extensivo de archivos de biblioteca
1) Para la conveniencia de la programación, para algunas funciones de uso común, el lenguaje de desarrollo correspondiente proporciona una biblioteca correspondiente Soporte de archivos.
2) Ocultar detalles específicos de la implementación de la función. Cuando un programador utiliza un archivo de biblioteca, solo necesita incluir el archivo de encabezado de la función requerida, sin tener que preocuparse por la implementación específica de la función. Para software comercial, su propiedad intelectual también está protegida.
3. ¿Cuáles son las formas de usar estas funciones de biblioteca?
En cualquier entorno de programación, los archivos de biblioteca son colecciones de funciones precompiladas. Estas funciones están en binario. El formulario de código se almacena en un archivo de biblioteca. Para usar estas funciones, los usuarios solo necesitan incluir estos archivos de biblioteca. En general, hay dos formas de obtener la función correspondiente del archivo de biblioteca.
1) En el momento de la compilación, el código de imagen binario de la función correspondiente en la biblioteca se copia directamente al programa compilado actualmente, y el programa actual se ejecuta de forma independiente. Esta biblioteca se llama biblioteca estática. En Linux, el sufijo .a es una biblioteca estática.
2) En el momento de la compilación, solo se hace referencia a la dirección de entrada del código de imagen binario de la función correspondiente en la biblioteca (no se copia directamente). El programa lee el código de función del archivo de biblioteca compartida en tiempo de ejecución (esto debe ser el primero La biblioteca compartida se carga en la memoria), que hace referencia indirectamente. Esta biblioteca se denomina biblioteca compartida. En Linux, se denomina en el formato libxxx.xo.xx.
4, cómo usar
Los tres tipos de métodos que usan la biblioteca estática, la biblioteca compartida y la biblioteca dinámica son muy similares, todos utilizan la opción es " -l " (Tenga en cuenta que se trata de "L ") en minúsculas. Esta opción se usa para indicar el archivo de biblioteca específico a usar. Dado que las reglas de nomenclatura de la biblioteca de funciones en Linux comienzan con "ld"; lib ", el archivo de biblioteca aquí solo necesita completar el contenido después de lib. Por ejemplo: hay un archivo de biblioteca estática libm.a, simplemente escriba "&lm"; - lm "; también para el archivo de biblioteca dinámica libm.so; al escribir, solo necesita escribir " -lm ", el comando de llamada completo Similar a lo siguiente:
[root @ localhost gcc] # gcc -o dynamic – L /root /lq /testc /lib /dynamic.o -lmydynamic
Por lo tanto, si ambos sistemas existen Cuando se utilizan un archivo de biblioteca estática y un archivo de biblioteca dinámica con el mismo nombre de archivo, ¿la opción de enlace llama un archivo de biblioteca estática o un archivo de biblioteca dinámica? Después de la prueba, puede encontrar que el sistema llama al archivo de biblioteca dinámica, lo cual se debe a que el sistema predeterminado en Linux es usar enlaces dinámicos. De esta manera, si el usuario desea llamar a un archivo de biblioteca estática que contiene un archivo de biblioteca dinámica con el mismo nombre, es necesario mostrar el nombre del archivo que contiene el nombre del sufijo después de " -l " por ejemplo, para escribir el archivo de biblioteca libm.a, debe escribir y " -llibm.a y ".
1) Si ya tiene un archivo de biblioteca estático libhello.a, el archivo de encabezado de este archivo de biblioteca es libhello.h, que tiene el siguiente contenido:
#ifndef __libhello_H__
#define __libhello_H__
void print_hello (void); //imprime hola mundo, esta es la biblioteca a la consola
#endif /* __ libhello_H __ * /
Podemos ver en el código anterior que el archivo de encabezado sabe que el archivo de biblioteca libhello.a contiene la función print_hello () y que su tipo de valor y parámetros de retorno están vacíos. Por lo tanto, al escribir un programa, solo necesita usar esta función (con el archivo de encabezado incluido), independientemente de los detalles de su implementación.
El programa de ejemplo main.c que usa el archivo de biblioteca libhello.a es el siguiente:
#include " libhello.h "
int main (int argc, char ** argv )
{
print_hello (); //Función de biblioteca de referencia
return 0;
}
Ahora podemos poner main .c, libhello.a copia en el mismo directorio, compile:
#gcc – usehello_static usehello.c – lhello //También puede usar libhello.a directamente, sin agregar una barra horizontal
2) Si ya tiene un archivo de biblioteca compartida libhello.so.0.0, tenemos que hacer dos enlaces simbólicos aquí (el motivo específico no lo tengo muy claro):
# ln – s libhello.so.0 libhello.so.0.0
# ln – s libhello.so libhello.so.0
Podemos copiar estos tres archivos al directorio actual, esta biblioteca La función print_hello () se define en el archivo libhello.so.0.0. Puede ver su archivo de encabezado libhello.h, que contiene el siguiente contenido:
#ifndef __libhello_H__
#define __libhello_H__
void print_hello (void); //es decir, print_hello ( La función ha estado activa
#endif /* __ libhello_H __ * /
Del mismo modo, también podemos hacer referencia a la función en el archivo de biblioteca compartida en main.c, el contenido de main.c es el siguiente:
#include " libhello.h "
int main (int argc, char ** argv)
{
print_hello (); //Función de biblioteca de referencia
return 0;
}
Luego compile la conexión con el siguiente comando (puede copiar el archivo de biblioteca libhello.so.0.0 al directorio o sistema actual /lib En el directorio):
#gcc – Wall – g – c usehello.c – o usehello.o //usehello.o es un archivo de objeto binario
# gcc – g – o usehello_dynamic usehello.o – L ./-lhello //La etiqueta roja es un comando específicamente para hacer referencia a bibliotecas compartidas " -L dir "
Después de generar el archivo ejecutable, puede usar ldd La biblioteca compartida utilizada por el ejecutable de comandos:
# ldd usehello_dynamic
El terminal indicará: libhello.so.0 = > no encontrado, por lo tanto, si desea que este ejecutable se ejecute como se espera, debe Ejecuta la biblioteca compartida a la ruta de búsqueda de la biblioteca:
# LD_LIBRARY_PATH = $ (pwd) ./usehello_dynamic
No hay un nuevo concepto en este artículo. Simplemente usamos herramientas de línea de comandos para
Bajo la partición de Linux es más problemático, la herramienta más conveniente se llama fdisk Po
Cuando se trata de problemas de Oracle en el entorno de producción real, a veces se necesita una i
No hay duda de que Red Hat es la elección de muchas compañías que consideran Linux, pero en los últi
Cómo usar el comando sftp en Linux
Ejemplo de expresión regular SHELL de uso común
Linux rz transferir archivos grandes por qué se bloquea
Microsoft preinstalará Skype para computadoras con Windows 7
Linux memoria compartida Comentarios
Configure el script para que se inicie automáticamente en el sistema Linux
Realice la transferencia de archivos de windows y windows
Saltarse bloque defectuoso en el ****
Instalación desatendida del sistema RedHat basado en red
Escribe dispositivo de bloque de acuerdo con el sector de Linux
La tarjeta de red Centos eth1 se convierte en el método de modificación de eth0
Visualización del método de memoria utilizado por un programa en Linux
Win8 /Win8.1 cómo instalar y utilizar Xbox One mango
Cómo cambiar el fondo del escritorio en Windows 8
Cómo abrir un archivo RAR en el sistema Win8
Cómo recuperar remotamente cualquier archivo en la computadora con Windows 7
El disco duro no es un dios, será malo. Los expertos te enseñan cómo guardarlo
Particiones ocultas especiales de Windows 7 para buscar