-fvisibility=hidden
hace que todos sus símbolos estén ocultos por defecto .
Lo que debe hacer entonces es elegir qué funciones desea que sean visibles para los usuarios que se vinculan con su biblioteca y hacerlas visibles marcándolas con un atributo visible.
Por ejemplo
void __attribute__((visibility("default"))) Exported()
{
// ...
}
Reduce el almacenamiento de información de símbolos innecesaria que es privada para los objetos compartidos.
Considere un objeto compartido que tiene más de 10,000 símbolos (funciones/variables globales), pero solo 100 de ellos eran funciones públicas accesibles para los usuarios de la biblioteca. Podemos hacer que las únicas 100 funciones sean visibles para otros y los 9900 símbolos restantes se mantendrán privados.
También se puede usar para reducir el tamaño del objeto compartido, porque su tabla de reubicación tendrá solo 100 símbolos de información. Usando esta bandera junto con -ffunction-sections -fdata-sections reducirá aún más el tamaño del objeto compartido al tener la definición que es relevante para esos 100 símbolos.