我浏览了gcc (在/usr/include/c++/
中)包含的一些标准标题的源代码,并在每个标题的顶部发现了以下内容:
namespace std _GLIBCXX_VISIBILITY(default)
_GLIBCXX_VISIBILITY(default)
到底是什么?
发布于 2015-03-26 03:09:57
这是一个预处理宏。定义为:
#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
https://stackoverflow.com/questions/29270208
复制相似问题