-fvisibility-inline-hidden 与 gcc 中的 -fvisibility=hidden 有何不同

How -fvisibility-inlines-hidden differs from -fvisibility=hidden in gcc

本文关键字:hidden 何不同 -fvisibility gcc 中的 -fvisibility-inline-hidden      更新时间:2023-10-16

根据 http://gcc.gnu.org/wiki/Visibility,

使用-fvisibility=hidden,您告诉 GCC,每个未明确标记为可见性属性的声明都具有隐藏的可见性。

-fvisibility-inlines-hidden会导致所有内联类成员函数具有隐藏的可见性

当我编译一个非常大的项目时,在我看来,与使用-fvisibility=hidden相比,将-fvisibility-inlines-hidden-fvisibility=hidden一起添加确实可以隐藏更多的符号。但是我找不到一个最低限度的例子来显示-fvisibility-inlines-hidden生效的确切差异。我也尝试了这个例子,但没有看到后者的效果。

有人可以给我看一个最小的例子,表明如果我已经在使用-fvisibility=hidden-fvisibility-inlines-hidden仍然是必要的?我正在使用 GCC 5.3.0

根据 http://gcc.gnu.org/wiki/Visibility

。命令行开关:-fvisibility-inlines-hidden.这会导致所有内联类成员函数具有隐藏的可见性,从而导致导出符号表大小和二进制大小显着减少,尽管不如使用-fvisibility=hidden那么多。但是,-fvisibility-inlines-hidden可以在不更改源的情况下使用,除非您需要覆盖它,其中地址标识对函数本身或任何函数本地静态数据很重要。

换句话说,如果您已经使用-fvisibility-inlines-hidden,则无法帮助您隐藏更多符号-fvisibility=hidden.

但是您几乎可以安全地添加-fvisibility-inlines-hidden标志来构建一个导出所有符号的程序,并免费减少导出符号表,因为排除的符号无论如何都是内联的,因此它们可以在没有导出符号表的其他模块中使用。