如何在gcc中使用-fvisibility-inlines-hidden与-fvisibility=hidden有何不同?

10
根据 http://gcc.gnu.org/wiki/Visibility 的说明,使用 -fvisibility=hidden 告诉GCC,未被显式标记可见性属性的每个声明都具有隐藏的可见性。
并且,-fvisibility-inlines-hidden 导致所有内联类成员函数具有隐藏的可见性。
当我编译一个非常大的项目时,似乎使用 -fvisibility-inlines-hidden-fvisibility=hidden 可以比单独使用 -fvisibility=hidden 能够隐藏更多的符号。但我无法找到一个最小的例子来展示其中的确切区别,即何时会发生 -fvisibility-inlines-hidden 的效果。我还尝试了这个例子,但未能看到后者的效果。
有人能否向我展示一个最小的例子,表明如果已经使用 -fvisibility=hidden,则仍需要使用 -fvisibility-inlines-hidden?我正在使用GCC 5.3.0。
1个回答

4
根据http://gcc.gnu.org/wiki/Visibility, 可以使用命令行开关-fvisibility-inlines-hidden。这会使所有内联类成员函数具有隐藏的可见性,从而导致显著的导出符号表大小和二进制文件大小减小,但不如使用-fvisibility=hidden减小得多。然而,-fvisibility-inlines-hidden可以在没有源更改的情况下使用,除非您需要覆盖对于函数本身或任何函数局部静态数据地址标识很重要的内联函数。

换句话说,如果已经使用了-fvisibility=hidden,那么-fvisibility-inlines-hidden不能帮助您隐藏更多的符号。
但是,您几乎可以安全地添加-fvisibility-inlines-hidden标志来构建一个程序,其中所有符号都已导出,并免费获得一些导出符号表的减小,因为被排除的符号无论如何都是内联的,因此它们在其他模块中是可用的,而无需导出符号表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接