根据http://gcc.gnu.org/wiki/Visibility,
使用
-fvisibility=hidden,您是在告诉 GCC,每个未显式标记为可见性属性的声明都具有隐藏的可见性。
和
-fvisibility-inlines-hidden导致所有内联类成员函数具有隐藏可见性
当我编译一个非常大的项目时,在我看来,-fvisibility-inlines-hidden与使用 with-fvisibility=hidden相比,与 with相加确实可以隐藏更多符号-fvisibility=hidden。但我找不到一个最小的例子来显示生效的确切差异-fvisibility-inlines-hidden。我也试过这个例子,但没有看到后者的效果。
有人可以向我展示一个最低限度的例子,-fvisibility-inlines-hidden如果我已经在使用,它仍然是必要的-fvisibility=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标志来构建一个导出所有符号的程序,并免费减少导出符号表的数量,因为排除的符号无论如何都是内联的,因此它们可以在其他没有导出符号表的模块中使用。