Archivo de objeto compartido (.so): esencial para el desarrollo, guía de uso detallada.

Archivo de objeto compartido (.so): esencial para el desarrollo, guía de uso detallada.

En informática, una biblioteca de vínculos dinámicos (DLL) u objeto compartido (SO) es un archivo objeto que puede ser utilizado por múltiples programas (procesos) al mismo tiempo. A diferencia de las bibliotecas estáticas, los objetos compartidos también se pueden ensamblar y cargar en la memoria en tiempo de ejecución. Los objetos compartidos se utilizan ampliamente en varios sistemas informáticos y lenguajes de programación y son muy populares por sus funciones eficientes y flexibles.

En los sistemas Linux, el contenido relacionado con los archivos .so es muy importante. Este artículo presentará los conceptos básicos de los archivos SO, los métodos de creación y el uso de algunas herramientas relacionadas.

  1. ¿Qué es un archivo SO?

Un archivo SO es un tipo especial de archivo ejecutable que pueden compartir varios programas y se denomina archivo de "objeto compartido". Cuando un programa necesita acceder a funciones en un archivo SO, se vinculará con la biblioteca correspondiente en tiempo de ejecución para acceder a estas funciones.

Los archivos SO generalmente se usan para enlaces dinámicos para lograr la modularización del programa y la reutilización del código. Los archivos SO contienen muchos fragmentos de código ejecutable y estos fragmentos de código se pueden compartir entre programas. Este método de uso compartido suele ocupar menos espacio en disco y memoria que el método de enlace estático, lo que ahorra recursos del sistema.

  1. Reglas de nomenclatura de archivos SO

En los sistemas Linux, los archivos SO suelen denominarse lib*.so.*. Entre ellos, el asterisco representa el nombre y número de versión de la biblioteca.

Por ejemplo: libm.so.6, en este nombre de archivo, "lib" es un prefijo, lo que significa que es un archivo de biblioteca y "m" es el nombre de la biblioteca, ".so" significa que es un objeto compartido archivo", 6" representa el número de versión.

  1. Cómo crear un archivo SO

Para crear un archivo SO, primero debe escribir el código fuente y compilarlo en un archivo objeto. Luego use opciones especiales (como -shared) de compiladores como GCC o Clang para producir objetos compartidos.

Aquí hay un fragmento de código de muestra que crea un objeto compartido llamado "libtest.so":

#include <stdio.h>
int main() {
    
    
  printf("Hello, World!\n");
  return 0;
}

Primero, guarde el código en un archivo llamado "test.c". Ingrese el siguiente comando en la terminal para compilar:

gcc -fPIC -shared -o libtest.so test.c

-fPIC es un indicador del compilador que le indica al compilador que genere código independiente de la posición. Este código se puede cargar en cualquier ubicación de memoria y ejecutar. La opción -shared le dice al compilador que genere archivos de objetos compartidos. Finalmente, la opción -o especifica el nombre del archivo de salida.

  1. Uso de archivos SO

Al utilizar objetos compartidos, un programa puede vincularse dinámicamente a las bibliotecas requeridas en tiempo de ejecución, en lugar de vincular bibliotecas al programa en tiempo de compilación. Este enfoque permite compilar programas en diferentes plataformas para diferentes versiones y subconjuntos de biblioteca sin tener que volver a compilar todo el programa.

El siguiente es un ejemplo de un programa en C que utiliza archivos de objetos compartidos:

#include <stdio.h>
#include <dlfcn.h>

int main() {
    
    
  void *handle;
  void (*print_message)();

  handle = dlopen("libtest.so", RTLD_LAZY);
  if (!handle) {
    
    
    fprintf(stderr, "%s\n", dlerror());
    return 1;
  }

  print_message = dlsym(handle, "print_message");
  if (print_message == NULL) {
    
    
    fprintf(stderr, "%s\n", dlerror());
    dlclose(handle);
    return 1;
  }

  print_message();

  dlclose(handle);

  return 0;
}

En este programa, usamos la función dlopen para cargar un archivo objeto compartido llamado "libtest.so". Luego usamos la función dlsym para obtener la función denominada "print_message" en el archivo de objeto compartido y la usamos para generar un mensaje. Finalmente, use la función dlclose para cerrar el identificador y liberar el recurso.

  1. Herramienta de depuración de archivos SO

En los sistemas Linux, existen algunas herramientas útiles para depurar archivos de objetos compartidos. Aquí hay una introducción a dos de estas herramientas:

5.1 ldd

La herramienta ldd puede ver las bibliotecas de las que depende un determinado archivo ejecutable o de objeto compartido. Ingrese el siguiente comando en la terminal para usar la herramienta:

ldd /path/to/file.so

Esto enumerará todas las bibliotecas de enlaces dinámicos conectadas al archivo y sus rutas.

5,2 millas náuticas

La herramienta nm puede mostrar información de la tabla de símbolos en archivos de objetos compartidos. Ingrese el siguiente comando en la terminal para usar la herramienta:

nm -D /path/to/file.so

Esto enumera todos los símbolos dinámicos en el archivo de objeto compartido y sus direcciones.

  1. Resumir

El archivo de objeto compartido (archivo SO) es un tipo de archivo ejecutable muy importante en informática. Puede utilizar enlaces dinámicos para compartir fragmentos de código entre programas, realizar la modularización del programa y la reutilización del código y mejorar la eficiencia de ejecución del programa. Crear un archivo SO requiere escribir el código fuente y compilarlo en un archivo objeto, y luego compilarlo con opciones específicas para generar el archivo SO. En los sistemas Linux, los archivos de objetos compartidos se pueden ver y depurar utilizando herramientas como ldd y nm.

Este artículo describe los conceptos básicos, las reglas de nomenclatura, los métodos de creación, el uso y las herramientas de depuración de los archivos SO. Espero que este artículo permita a los lectores comprender y aplicar mejor los archivos SO y mejorar la eficiencia del desarrollo de software.

Supongo que te gusta

Origin blog.csdn.net/m0_72410588/article/details/132892947
Recomendado
Clasificación