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/

10-10 15:54