首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当应用于标准c++编译的可执行文件时,gcc的"-fvisibility=hidden“是否有害?

当应用于标准c++编译的可执行文件时,gcc的"-fvisibility=hidden“是否有害?
EN

Stack Overflow用户
提问于 2018-10-21 16:39:03
回答 2查看 469关注 0票数 3

我正在编译ngspice。它的configure.ac将-fvisibility=hidden添加到所有编译步骤中,而不仅仅是在生成共享库的“代码模型”期间。

如果在编译标准可执行文件时添加-fvisibility=hidden,会有风险吗?

EN

回答 2

Stack Overflow用户

发布于 2018-10-21 18:51:08

对于标准的可执行文件,通常不需要有任何可见的符号,除了main。但是,如果使用-fvisibility=hidden编译,编译器似乎足够聪明,可以使main保持可见。

例外情况是,当您的程序在运行时使用dlopen()加载插件库时,这些插件希望能够调用主程序中的函数。你的插件将无法找到所需的符号。

票数 2
EN

Stack Overflow用户

发布于 2018-10-21 18:59:34

不是的。它只会在外部符号上添加一个属性,当链接器看到它正在生成一个可执行文件时,该属性将被忽略(除非您使用的是-rdynamic/-Wl,--export-dynamic)。另一方面,可能会影响性能的是使用-fpic/-fPIC编译,因为这会使代码速度变慢。-fpic/-fPIC对于可执行文件是不必要的,除非它们是独立于位置的可执行文件(PIE)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52913470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档