#pragma GCC visibility push 和 #pragma GCC visibility pop

适用的调用

表 1. 接受给定编译指示的调用
编译指示 (pragma) xlc (编译 C) xlC (编译 C++) xlclang(编译 C) xlclang++(编译 C++)
#pragma GCC visibility push, #pragma GCC visibility pop
注: 此表中仅列出典型调用。 对于所有基本调用及其等效特殊调用,您可以参阅 编译器调用的完整列表

类别

优化和调整

用途

指定对象文件中的外部链接实体的可视性属性。

语法

读取语法图跳过可视语法图#pragmaGCCvisibility push( defaultprotectedhiddeninternal )
读取语法图跳过可视语法图#pragmaGCCvisibility pop

参数

缺省值
指示受影响的外部链接实体具有缺省可视性属性。 这些实体在共享库中导出,这些实体可以被抢占。
保护
指示受影响的外部链接实体具有受保护的可视性属性。 这些实体将导出到共享库,但无法被抢占。
已隐藏
指示受影响的外部链接实体具有隐藏可视性属性。 这些实体不会在共享库中导出,但可以通过指针间接引用它们的地址。
internal
指示受影响的外部链接实体具有内部可视性属性。 这些实体不会在共享库中导出,其地址不可用于其他模块。
限制: 在此发行版中,隐藏和内部可视性属性相同。 可以通过指针间接引用使用这些可视性属性中的任何一个指定的实体的地址。

使用量

您可以通过在源程序中使用 #pragma GCC visibility push#pragma GCC visibility pop 编译器伪指令对来选择性地设置实体的可视性属性。 如果指定 #pragma GCC visibility pop 伪指令而不指定相应的 #pragma GCC visibility push 伪指令,那么编译器将发出警告消息。 实体可视性属性描述在一个模块中定义的实体是否可以其他模块中引用或使用以及如何被引用和使用。 可视性属性只影响具有外部链接的实体,并且不会增加其他实体的可视性。 如果实体定义在链接时被系统解析,但在运行时被另一个实体定义替换,那么就会发生实体抢占。

注: 在 AIX® 平台上,仅当使用运行时链接时才会发生实体抢占。 有关详细信息,请参阅 将库链接到应用程序可视性属性在 AIX 7.1 TL4 和 AIX 7.2上受支持。

相关信息