我今天从Ubuntu 12.04升级,我认为g ++ - 4.6到Ubuntu 12.10,g ++ - 4.7.2。在我的代码中,我有一些标记为__attribute__((always_inline))
的函数。这样做的原因很简单,分析表明我显着提高了代码的性能。它适用于g ++ 4.6但现在使用g ++ 4.7我收到错误消息:
错误:内联调用always_inline时失败'void func_name(args)':函数体可以在链接时被覆盖
我无法分享我的实际代码,我试图将其缩小范围但是当我改变太多时,错误消失了,所以这没有用。我对此错误消息的根本原因感兴趣。
答案 0 :(得分:15)
我不打算自己回答这个问题,但我在发布后几分钟意外地找到了答案。
此(隐秘)错误消息的原因是该功能未标记为inline
,仅__attribute((always_inline))
。
答案 1 :(得分:0)
对于我们来说,问题在于我们也未能将函数声明为“静态”。 “ 属性((always_inline))”以纯文本形式表示“内联并且从不包含函数体”,错误消息表示“编译器必须包含函数体”。在我们的例子中,由于该函数不是“静态”的,因此需要可供外部参考。