1

我使用链接时优化(-fltoing++ld命令行),并且我的一些方法声明(在标题中)被标记为extern inline(并且仅inline.cpp文件中)。编译产量:

./Client/include/GVGLObjects.hpp:96:32: error: storage class specified for 'VertexBuffer'
             EFAST VertexBuffer();
                                ^

以及其他方法和功能的一堆类似错误。EFAST意味着extern inline

为什么在启用 LTO 的情况下会发生这种情况?如果不允许这样做,我如何将声明和定义与内联和 LTO 分开?

4

1 回答 1

1

extern inline存在于 C 中,而不存在于 C++ 中,尽管许多编译器允许它作为扩展(ref)。

大概 GCC 用来执行 LTO ( ref ) 的任何机制和文件格式都与这个非标准的东西不兼容。的文档-flive-patching=level很有趣,因为它描述了与内联和存储类相关的内容,并告诉我们其中一些在使用 LTO 时不可用(尽管实际-flto描述没有特别提到extern inline扩展)。

您可能不希望EFAST在 C++ 代码中使用此宏。

于 2019-07-25T13:56:17.317 回答