栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何隐藏在多个文件中可见的全局变量?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何隐藏在多个文件中可见的全局变量?

您需要GCC 的可见性属性扩展。

实际上,类似:

 #define MODULE_VISIBILITY  __attribute__ ((visibility ("hidden"))) #define PUBLIC_VISIBILITY  __attribute__ ((visibility ("default")))

(您可能想要

#ifdef
上面的宏,使用一些配置技巧àla
autoconf
和其他 自动工具 ;在其他系统上,您将只有空的定义,如
#definePUBLIC_VISIBILITY 
etc …)

然后,声明一个变量:

int module_var  MODULE_VISIBILITY;

或功能

void module_function (int) MODULE_VISIBILITY;

然后,您可以在共享库中使用

module_var
或调用
module_function
,但不能在外部使用。

另请参见GCC 的-fvisibility代码生成选项。

顺便说一句,您还

-Dsomeglobal=alongname3419a6
可以
someglobal
像往常一样编译和使用整个库;要真正找到它,您的用户将需要将相同的预处理器定义传递给编译器,并且可以使名称
alongname3419a6
随机且不太可能使冲突不太可能。


PS。这种可见性 特定于GCC (可能还 特定于 ELF共享库,
例如Linux上的那些)。如果没有GCC或没有共享库,它将无法正常工作。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。也许其他一些编译器(

clang
来自LLVM)也可能支持
Linux上共享库 (不是静态
)。实际上,真正的隐藏(针对单个共享库的多个编译单元)主要是由链接程序完成的(因为ELF共享库允许这样做)。




转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/387318.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号