-fvisibility=hidden
macht alle Ihre Symbole standardmäßig ausgeblendet .
Was Sie dann tun müssen, ist auszuwählen, welche Funktionen für Benutzer sichtbar sein sollen, die mit Ihrer Bibliothek verlinken, und sie sichtbar zu machen, indem Sie sie mit einem sichtbaren Attribut markieren.
Z. B.
void __attribute__((visibility("default"))) Exported()
{
// ...
}
Es reduziert das Speichern unnötiger Symbolinformationen, die für die Shared Objects privat sind.
Stellen Sie sich ein gemeinsam genutztes Objekt vor, das mehr als 10.000 Symbole (Funktionen/globale Variablen) hat, aber nur 100 davon waren öffentliche Funktionen, auf die die Benutzer der Bibliothek zugreifen können. Wir können die einzigen 100 Funktionen für andere sichtbar machen und die restlichen 9.900 Symbole werden privat gehalten.
Es kann auch verwendet werden, um die Größe gemeinsam genutzter Objekte zu reduzieren, da seine Verschiebungstabelle nur 100 Informationssymbole haben wird. Verwendung dieses Flags zusammen mit -ffunction-sections -fdata-sections wird die gemeinsame Objektgröße weiter reduzieren, indem es die Definition hat, die für diese 100 Symbole relevant ist.