GNU/Linux >> LINUX-Kenntnisse >  >> Linux

C++ -fvisibility=hidden -fvisibility-inlines-hidden

-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.


Linux
  1. Warum ist eine Variable in einer Subshell sichtbar?

  2. Was bedeuten die von Ls -f angezeigten Symbole?

  3. Linux – Sind Umgebungsvariablen für nicht privilegierte Benutzer unter Linux sichtbar?

  4. Windows 10 ist auf Grub nicht sichtbar?

  5. Aufrufliste in C oder C++ drucken

So kompilieren und führen Sie C- und C++-Programme unter Linux aus

Wie kann ich C++-Code profilieren, der unter Linux ausgeführt wird?

C++ Boost ASIO einfacher periodischer Timer?

C++ erhält Linux-Distributionsname\Version

C++-Befehlszeilenschnittstelle

Rufen Sie eine C-Funktion aus C++-Code auf