-fvisibility=hidden
rende tutti i tuoi simboli nascosti per impostazione predefinita .
Quello che devi fare è scegliere quali funzioni vuoi che siano visibili agli utenti che si collegano alla tua libreria e renderle visibili contrassegnandole con un attributo visibile.
Ad esempio
void __attribute__((visibility("default"))) Exported()
{
// ...
}
Riduce la memorizzazione di informazioni sui simboli non necessarie che sono private per gli oggetti condivisi.
Considera un oggetto condiviso che ha più di 10.000 simboli (funzioni/variabili globali), ma solo 100 di essi erano funzioni pubbliche accessibili agli utenti della biblioteca. Possiamo rendere le uniche 100 funzioni visibili agli altri e i restanti 9.900 simboli devono essere mantenuti privati.
Può essere utilizzato anche per ridurre le dimensioni dell'oggetto condiviso, poiché la sua tabella di ricollocazione avrà solo 100 simboli di informazioni. Usando questo flag insieme a -ffunction-sections -fdata-sections ridurrà ulteriormente la dimensione dell'oggetto condiviso avendo la definizione che è rilevante per quei 100 simboli.