C++ gcc stdio.h错误
我在编译C++ gcc stdio.h错误,c++,c,linux,gcc,C++,C,Linux,Gcc,我在编译gcc-c-O2…时遇到这些错误: In file included from /usr/include/stdio.h:930:0, from /home/martin/foo.c:3: /usr/include/x86_64-linux-gnu/bits/stdio2.h: In function ‘sprintf’: /usr/include/x86_64-linux-gnu/bits/stdio2.h:34:3: error: invalid u
gcc-c-O2…
时遇到这些错误:
In file included from /usr/include/stdio.h:930:0,
from /home/martin/foo.c:3:
/usr/include/x86_64-linux-gnu/bits/stdio2.h: In function ‘sprintf’:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:34:3: error: invalid use of ‘__builtin_va_arg_pack ()’
/usr/include/x86_64-linux-gnu/bits/stdio2.h: In function ‘snprintf’:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:65:3: error: invalid use of ‘__builtin_va_arg_pack ()’
仅当启用了gcc 4.6.1中的
-O2
时才会发生。有什么不对劲?我已经检查了所有的头部防护装置,它们看起来都正常。使用-O2
有什么好的理由吗?将-O
[或-O1
]替换为-O2
。如果您确实需要使用-O2
并希望缩小“罪魁祸首标志”,一个建议是使用-O1
,然后逐个打开用于-O2
的gcc
标志。以下是-O2
使用的标志列表
-fthread-jumps
-falign-functions
-falign-jumps
-falign-loops
-falign-labels
... // there is a big list
您可以在中找到这些标志。手册应详细说明每个标志及其用途 你们的发行量是多少?你的
foo.c
程序是什么?gcc
是您的发行版打包的吗?您能否显示整个命令行,因为很可能缺少a-D或类似的命令行。如果您编译的源文件只包含“”include
”,是否会发生这种情况?如果不是,你需要添加什么来实现它?为什么C++标志?到目前为止,我们所看到的一切都表明这与C无关:gcc的-O
级别都不等同于-f
开关的任何组合(更准确地说,它们都不仅仅是设置一组-f
开关)。