Hacer parte de un C lib “privado”

Estoy desarrollando una biblioteca compartida, y como el código es grande, he decidido dividirlo en muchos encabezados y archivos de origen, como cualquier progtwig normal :).

El problema es que la mayoría de estos encabezados son para uso interno, es decir, no quiero que sean accesibles desde fuera de mi biblioteca. Así que estoy pensando en moverlos a un archivo fuente grande y solo proporcionar encabezados para lo que será visible.

Es una buena idea hacer eso? ¿Debo preocuparme por la visibilidad?

Gracias

En lugar de fusionar los encabezados, simplemente manténgalos junto a los archivos de origen y no los “publique” como parte de su paquete de desarrollo. Como ejemplo de esto, el kernel de Linux tiene muchos encabezados en el árbol de origen, pero solo ciertos encabezados están expuestos a aplicaciones (en la estructura de include ).

Debes acercarte desde un ángulo de “limpieza”; no envíe cabeceras que incluyan funciones a las que no tiene intención de llamar. No documente funciones para las que no está enviando encabezados.

Si alguien realmente quiere llamar a una función en su biblioteca, puede hacerlo, pero debe intentar dejar en claro que ese es un caso de uso no compatible y es su problema si todo sale mal.

Sí, debes preocuparte por la visibilidad del símbolo. En Windows, configure para utilizar DLLEXPORT. En Linux, defina DLLEXPORT para establecer la visibilidad del símbolo por defecto, pero compile todo con -fvisibility = hidden. Hay un artículo de Ulrich Drepper que es útil.

Para los archivos de inclusión, puede separarlos en directorios y / o puede usar su sistema de empaquetado para simplemente copiar los archivos públicos.