__extern_inline func导致未定义的引用错误 我用G++4.85编译-C++代码,-O0- STD= C++ 11,< /P> #include <stdio.h> __extern_inline float func(float x) { return x*x; } int main(int argc, char *argv[]) { printf("%d\n", func(100)); }

__extern_inline func导致未定义的引用错误 我用G++4.85编译-C++代码,-O0- STD= C++ 11,< /P> #include <stdio.h> __extern_inline float func(float x) { return x*x; } int main(int argc, char *argv[]) { printf("%d\n", func(100)); },c++,gcc,clang,C++,Gcc,Clang,但是,如果我将-O1或-O2添加到编译器选项中,它将成功构建。 此外,如果我将“\uuuu extern\u inline”更改为“extern\uuu inline”或“\uuuuu extern\u always\u inline”,它也会生成。我在叮当声中看到类似的行为 我想让代码(保持_extern_内联,因为定义存在第三方库中,我不想接触)能够在-O0下链接。我能做什么?是否有任何编译器选项或#定义来解决此错误 我读过这个文件,但它似乎对我的情况没有帮助 另外,它看起来像是在sys/

但是,如果我将-O1或-O2添加到编译器选项中,它将成功构建。 此外,如果我将“\uuuu extern\u inline”更改为“extern\uuu inline”或“\uuuuu extern\u always\u inline”,它也会生成。我在叮当声中看到类似的行为

我想让代码(保持_extern_内联,因为定义存在第三方库中,我不想接触)能够在-O0下链接。我能做什么?是否有任何编译器选项或#定义来解决此错误

我读过这个文件,但它似乎对我的情况没有帮助

另外,它看起来像是在sys/cdefs.h中定义了uuu extern_inline,如下所示

#define __extern_inline extern __inline __attribute__ ((__gnu_inline__))

我想这是因为
features.h中的以下宏:

/* Decide whether we can define 'extern inline' functions in headers.  */
#if __GNUC_PREREQ (2, 7) && defined __OPTIMIZE__ \
    && !defined __OPTIMIZE_SIZE__ && !defined __NO_INLINE__ \
    && defined __extern_inline
# define __USE_EXTERN_INLINES   1
#endif
正如您所看到的,外部内联线只允许用于优化的版本。

这不是问题所在,但是
%d“
对于
printf
类型为
float
的参数是错误的。
/* Decide whether we can define 'extern inline' functions in headers.  */
#if __GNUC_PREREQ (2, 7) && defined __OPTIMIZE__ \
    && !defined __OPTIMIZE_SIZE__ && !defined __NO_INLINE__ \
    && defined __extern_inline
# define __USE_EXTERN_INLINES   1
#endif