什么是_GLIBCXX_VISIBILITY?

时间:2015-03-26 02:43:23

标签: c++ g++

我正在查看gcc中包含的一些标准标头的来源(在/usr/include/c++/中),并在每个标头的顶部找到以下内容:

namespace std _GLIBCXX_VISIBILITY(default)

究竟是什么_GLIBCXX_VISIBILITY(default)

1 个答案:

答案 0 :(得分:13)

它是一个预处理器宏。并定义为:

#if _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY
#define _GLIBCXX_VISIBILITY(V) __attribute__ ((__visibility__ (#V)))
#else
#define _GLIBCXX_VISIBILITY(V) 
#endif

因此,如果_GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY为真,那么在您的情况下,它将扩展为:

__attribute__ (( __visibility__ ("default")))

如果_GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY为假,则无效。

__visibility__属性用于定义DSO文件中符号的可见性。使用"隐藏"而不是"默认"可以用来隐藏DSO之外的符号。

例如:

__attribute__ ((__visibility__("default"))) void foo();
__attribute__ ((__visibility__("hidden"))) void bar();

函数foo()可以在DSO外部使用,而bar()基本上是私有的,只能在DSO中使用。

您可以在此处详细了解__visibility__属性:https://gcc.gnu.org/wiki/Visibility