Es ist ein Präprozessor-Makro. Und ist definiert als:
#if _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY
#define _GLIBCXX_VISIBILITY(V) __attribute__ ((__visibility__ (#V)))
#else
#define _GLIBCXX_VISIBILITY(V)
#endif
Also, wenn _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY
wahr ist, dann in Ihrem Fall wird es erweitern:
__attribute__ ((__visibility__ ("default")))
else if _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY
falsch ist es nichts zu tun.
Das Attribut __visibility__
wird zum Definieren der Sichtbarkeit der Symbole in einer DSO-Datei verwendet. Mit "hidden" anstelle von "default" können Symbole von Dingen außerhalb des DSO versteckt werden.
Zum Beispiel:
__attribute__ ((__visibility__("default"))) void foo();
__attribute__ ((__visibility__("hidden"))) void bar();
Die Funktion foo()
würde von außerhalb des DSO nutzbar sein, während bar()
grundsätzlich vertraulich und dürfen nur innerhalb des DSO verwendet werden.
Sie können ein bisschen mehr über das __visibility__
Attribut lesen Sie hier: https://gcc.gnu.org/wiki/Visibility
Dank !. Das beantwortet meine Frage – user3875690