C Programming in Linux Tutorial #040 – Dynamic Shared Libraries

En este tutorial, exploraremos cómo trabajar con bibliotecas compartidas dinámicas en C en el entorno Linux. Las bibliotecas compartidas dinámicas permiten compartir código entre múltiples programas y se cargan en tiempo de ejecución.

¿Qué es una biblioteca compartida dinámica?

Una biblioteca compartida dinámica es un archivo que contiene código y datos que pueden ser utilizados por varios programas al mismo tiempo. A diferencia de las bibliotecas estáticas, las bibliotecas compartidas se cargan en memoria solo una vez, independientemente de cuántos programas las utilicen.

Creación de una biblioteca compartida dinámica

A continuación se muestra el proceso básico para crear y utilizar una biblioteca compartida dinámica.

1. Escribir el código de la biblioteca

Primero, crea un archivo de código fuente con la implementación de las funciones que deseas incluir en la biblioteca.

/* libmath.c */
#include <stdio.h>

void add(int a, int b) {
    printf("Resultado de %d + %d = %d\n", a, b, a + b);
}

void subtract(int a, int b) {
    printf("Resultado de %d - %d = %d\n", a, b, a - b);
}
    

2. Crear el archivo de encabezado

El archivo de encabezado proporciona las declaraciones de las funciones que la biblioteca ofrece.

/* libmath.h */
#ifndef LIBMATH_H
#define LIBMATH_H

void add(int a, int b);
void subtract(int a, int b);

#endif
    

3. Compilar el código fuente en una biblioteca compartida dinámica

Utiliza el siguiente comando para compilar el archivo de código fuente en una biblioteca compartida:

gcc -fPIC -shared -o libmath.so libmath.c
    

El flag -fPIC genera código independiente de posición, necesario para bibliotecas compartidas, y -shared indica que se debe crear una biblioteca compartida.

Uso de la biblioteca compartida dinámica en un programa

A continuación se muestra cómo usar la biblioteca compartida en un programa:

/* main.c */
#include <stdio.h>
#include "libmath.h"

int main() {
    add(5, 3);
    subtract(10, 7);
    return 0;
}
    

4. Compilar el programa con la biblioteca compartida

Compila el programa especificando la ubicación de la biblioteca compartida:

gcc main.c -L. -lmath -o main
    

Aquí, -L. indica el directorio actual como la ubicación de las bibliotecas y -lmath especifica que se debe enlazar con libmath.so.

5. Ejecutar el programa

Antes de ejecutar el programa, asegúrate de que el sistema pueda encontrar la biblioteca compartida. Puedes hacer esto añadiendo el directorio actual a la variable LD_LIBRARY_PATH:

export LD_LIBRARY_PATH=.
./main
    

Deberías ver la salida:

Resultado de 5 + 3 = 8
Resultado de 10 - 7 = 3
    

Consideraciones

Las bibliotecas compartidas ofrecen ventajas en términos de uso de memoria y espacio en disco, ya que el código de la biblioteca se carga en memoria solo una vez y puede ser compartido entre múltiples programas. Sin embargo, pueden presentar problemas si se actualiza la biblioteca y se necesita asegurar compatibilidad con versiones anteriores.

Conclusión

Las bibliotecas compartidas dinámicas son una herramienta poderosa para compartir código entre múltiples programas en Linux. Con los ejemplos proporcionados, ahora deberías tener una comprensión básica de cómo crear y utilizar bibliotecas compartidas dinámicas en C.