C/Visual C - Librerias en Unix

 
Vista:

Librerias en Unix

Publicado por orochi (1 intervención) el 12/11/2002 00:39:22
yo tengo esta libreria libsglib.so y hago llamadas a funciones que estan dentro de esta libreria.... esto lo hago en un archivo .c
y tengo que hacer este archivo .c un .so tambien... o sea una libreria que llama a otra libreria no logro enlazar correctamente esto desde el gnu-gcc si alguien sabe de la completa comanderia que deberia de introducir yo seria muy feliz
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Creación de una biblioteca compartida que llama a otra biblioteca compartida

Publicado por Alejandro (913 intervenciones) el 01/04/2025 19:01:40
Orochi, para crear una biblioteca compartida (`.so`) en C que llame a funciones de otra biblioteca compartida (`libsglib.so`), necesitas seguir algunos pasos específicos para asegurarte de que el enlazado se realice correctamente. A continuación, te muestro cómo hacerlo utilizando `gcc`.

Pasos para crear tu biblioteca compartida



1. Escribir tu código en C:
Asegúrate de que tu archivo `.c` contenga las funciones que deseas exportar en tu nueva biblioteca. Por ejemplo, supongamos que tienes un archivo llamado `milib.c` que llama a funciones de `libsglib.so`.

1
2
3
4
5
6
7
8
// milib.c
#include <stdio.h>
#include "sglib.h" // Asegúrate de incluir el encabezado de la biblioteca
 
void miFuncion() {
    // Llama a una función de libsglib.so
    sglib_funcion(); // Reemplaza con la función real que deseas llamar
}

2. Compilar tu biblioteca:
Para compilar `milib.c` en una biblioteca compartida (`milib.so`), utiliza el siguiente comando:

1
gcc -fPIC -shared -o milib.so milib.c -L. -lsglib

Explicación de las opciones:
- `-fPIC`: Genera código independiente de la posición, necesario para bibliotecas compartidas.
- `-shared`: Indica que se debe crear una biblioteca compartida.
- `-o milib.so`: Especifica el nombre de la biblioteca de salida.
- `milib.c`: Es el archivo fuente que estás compilando.
- `-L.`: Indica al compilador que busque bibliotecas en el directorio actual.
- `-lsglib`: Indica que se debe enlazar con `libsglib.so`. El prefijo `lib` y la extensión `.so` se omiten.

3. Verificar la biblioteca:
Asegúrate de que `libsglib.so` esté en el mismo directorio que `milib.so` o en un directorio que esté en la variable de entorno `LD_LIBRARY_PATH`. Puedes verificar que la biblioteca se haya creado correctamente con el siguiente comando:

1
ls -l milib.so

4. Ejemplo de uso:
Si deseas probar tu nueva biblioteca, puedes crear un archivo de prueba, por ejemplo, `main.c`:

1
2
3
4
5
6
7
// main.c
#include "milib.h" // Asegúrate de incluir el encabezado de tu nueva biblioteca
 
int main() {
    miFuncion(); // Llama a la función de tu biblioteca
    return 0;
}

Luego, compila y enlaza `main.c` con `milib.so` y `libsglib.so`:

1
gcc -o main main.c -L. -lmilib -lsglib

5. Ejecutar el programa:
Asegúrate de que las bibliotecas compartidas estén en el `LD_LIBRARY_PATH` o en el mismo directorio que tu ejecutable. Luego, ejecuta tu programa:

1
./main

Consideraciones finales:


- Encabezados: Asegúrate de tener los archivos de encabezado (`.h`) necesarios para ambas bibliotecas.
- Errores de enlace: Si encuentras errores de enlace, verifica que `libsglib.so` esté accesible y que las funciones que estás llamando estén correctamente definidas.
- Depuración: Si tienes problemas, puedes usar `ldd` para verificar las dependencias de tu biblioteca:

1
ldd milib.so
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar