从https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Optimize-Options.html#index-fsemantic-interposition
从https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-visibility-function-attribute
这听起来完全一样。
除了将-fno-semantic-interposition
显式标记为default
的任何函数更改为protected
之外,还有什么真正的区别吗?
最佳答案
这个问题很难回答,因为当前-fsemantic-interposition
实际上不起作用。在这个例子中
int a;
int
f1 (int a)
{
return a;
}
int
f2 (void)
{
return f1 (a) - a;
}
即使使用
f2
(以及return 0;
,也可以有效地将-O2 -fsemantic-interposition
的主体优化为-O2 -fno-semantic-interposition
,以防文档中的选项含义相反)。 I filed a bug.可能的目的是
-fsemantic-interposition
会禁用此类优化,因此最终您需要调用f1
并对结果进行显式计算。ELF符号可见性与之实际上并不相关,主要是因为它仅适用于动态链接。链接编辑器仍可以在静态链接时插入符号(例如,使用
-z muldefs
选项),因此编译器应确实提供一种无需更改符号属性即可启用插入的方式(因此,除了__attribute__ ((weak))
之外,还可以进行其他操作)。关于c++ - `-fno-semantic-interposition`和 `-fvisibility=protected`到底有什么不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51227608/