使用extern内联时,G ++发出“指定存储类”错误

时间:2019-07-25 12:53:25

标签: c++ g++ lto

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

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

以及其他方法和函数的类似错误。 EFAST的意思是extern inline

为什么启用LTO会发生这种情况?如果不允许这样做,如何用内联和LTO分隔声明和定义?

1 个答案:

答案 0 :(得分:1)

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

GCC用来执行LTO(ref)的任何机制和文件格式都可能与此非标准的东西不兼容。 The documentation for -flive-patching=level很有趣,因为它描述了与内联和存储类有关的内容,并告诉我们在使用LTO时其中某些内容不可用(尽管实际的-flto描述并未明确指出{ {1}}扩展名)。

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