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`.
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`.
2.
Compilar tu biblioteca:
Para compilar `milib.c` en una biblioteca compartida (`milib.so`), utiliza el siguiente comando:
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:
4.
Ejemplo de uso:
Si deseas probar tu nueva biblioteca, puedes crear un archivo de prueba, por ejemplo, `main.c`:
Luego, compila y enlaza `main.c` con `milib.so` y `libsglib.so`:
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:
-
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: