据http://gcc.gnu.org/wiki/Visibility称,
和
-fvisibility=hidden
,您告诉GCC,没有显式标记的每个声明都有一个隐藏的可见性。
和
-fvisibility-inlines-hidden
导致所有内联类成员函数都具有隐藏可见性。
当我编译一个非常大的项目时,在我看来,与使用-fvisibility-inlines-hidden
相比,在-fvisibility=hidden
中添加-fvisibility=hidden
确实可以隐藏更多的符号。但我找不到一个极小的例子来显示-fvisibility-inlines-hidden
产生效果的确切差别。我也尝试过this示例,但是没有看到后者的效果。
如果我已经在使用-fvisibility-inlines-hidden
,那么有人能给我一个最小的例子来说明-fvisibility=hidden
仍然是必要的吗?我用的是GCC 5.3.0
发布于 2021-10-12 20:01:52
根据http://gcc.gnu.org/wiki/Visibility
...命令行开关:
-fvisibility-inlines-hidden
。这会导致所有内联类成员函数都具有隐藏的可见性,从而导致显着的导出符号表大小&二进制大小的减少,尽管不如使用-fvisibility=hidden
。但是,-fvisibility-inlines-hidden
可以在没有源更改的情况下使用,除非您需要覆盖地址标识对函数本身或任何函数本地静态数据都很重要的内联。
换句话说,如果您已经使用了-fvisibility-inlines-hidden
,那么-fvisibility=hidden
无法帮助您隐藏更多的符号。
但是,您几乎可以安全地添加-fvisibility-inlines-hidden
标志来构建一个程序,其中所有符号都被导出,并且免费地减少了导出符号表,因为排除的符号无论如何都是内联的,因此它们可以在没有导出符号表的其他模块中使用。
https://stackoverflow.com/questions/59469822
复制相似问题