Linux下__attribute__((visibility (
时间: 2023-08-12 10:34:22 浏览: 87
该属性用于指定符号的可见性,即指定符号在链接时是否可见。在Linux环境下,有两种可见性:默认可见性和隐藏可见性。默认可见性表示符号在链接时会被导出,并可以被其他模块使用。而隐藏可见性表示符号在链接时不会被导出,只能被当前模块使用。
在使用__attribute__((visibility))时,可以设置参数"default"或"hidden"来指定符号的可见性。例如,__attribute__((visibility("default")))表示将符号设置为默认可见性,__attribute__((visibility("hidden")))表示将符号设置为隐藏可见性。
需要注意的是,__attribute__((visibility))只对函数、变量、类型、枚举等全局符号有效,对于局部符号无效。此外,该属性只在GCC编译器下有效,在其他编译器下可能无效。
相关问题
__attribute__((visibility("hidden")))
在GNU C中,__attribute__((visibility("hidden")))是用来设置符号的可见性属性的。这个属性指定了该符号在库中是否可以被导出,如果设置为"hidden",则表示该符号不会被导出,但可以在源文件之间共享。具体来说,该属性会使得符号在动态符号表中不可见,但仍然存在于符号表中用于静态链接。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [Linux下__attribute__((visibility (“default“)))的使用 + __attribute__((packed))详解](https://blog.csdn.net/jiesunliu3215/article/details/108709552)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
解释代码:#define test __attribute__(visibility("default"))
这段代码定义了一个名为 "test" 的宏,在宏的展开过程中使用了 GCC 特有的 __attribute__ 关键字,指定了该宏的可见性为 "default"。
在 C/C++ 中,一个符号(比如函数、变量等)的可见性(visibility)通常有三种,分别是:
- default:符号可以被外部文件访问。
- hidden:符号只能被当前文件访问。
- protected:符号可以被外部文件访问,但不能被动态链接库(shared library)中的其他符号引用。
使用 __attribute__ 关键字可以对编译器进行一些额外的指示,本例中的 "visibility" 就是其中之一。在这里,我们使用 "default" 指示该宏的可见性为默认值,即可以被外部文件访问。
这个特性主要用于 Linux 系统下的动态链接库开发。由于动态链接库是在运行时加载的,所以需要在编译时就指定符号的可见性,以便在运行时正确地解析符号。