我正在浏览gcc(in /usr/include/c++/)中包含的一些标准头文件的源代码,并在每个头文件的顶部找到以下内容:
namespace std _GLIBCXX_VISIBILITY(default)
Run Code Online (Sandbox Code Playgroud)
到底是_GLIBCXX_VISIBILITY(default)什么?
Dav*_*xon 15
它是一个预处理器宏.并定义为:
#if _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY
#define _GLIBCXX_VISIBILITY(V) __attribute__ ((__visibility__ (#V)))
#else
#define _GLIBCXX_VISIBILITY(V)
#endif
Run Code Online (Sandbox Code Playgroud)
所以,如果_GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY是真的,那么在你的情况下,它将扩展为:
__attribute__ (( __visibility__ ("default")))
Run Code Online (Sandbox Code Playgroud)
否则如果_GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY是假则不会做任何事情.
该__visibility__属性用于定义DSO文件中符号的可见性.使用"隐藏"而不是"默认"可以用来隐藏DSO之外的符号.
例如:
__attribute__ ((__visibility__("default"))) void foo();
__attribute__ ((__visibility__("hidden"))) void bar();
Run Code Online (Sandbox Code Playgroud)
该功能foo()可以在DSO外部使用,但bar()基本上是私有的,只能在DSO中使用.
您可以在__visibility__此处阅读有关该属性的更多信息:https://gcc.gnu.org/wiki/Visibility
| 归档时间: |
|
| 查看次数: |
3589 次 |
| 最近记录: |