到目前为止,我一直在使用g ++(在Windows上),但由于某些原因,我想使用Code:Blocks来使用sfml库(相当简单的配置,与clean g ++相反)。
我使用bison创建file.tab.c和file.tab.h(来自file.y),我使用flex for lex.yy.c(来自file.l),我有自己的文件包含所需的功能对于我的项目(file.cpp和file.h)。 所以用g ++我就这样编译:
g++ lex.yy.c file.tab.c file.cpp -o file.exe
它工作正常。现在我想用Code:Blocks编译这些文件,我得到一个奇怪的错误:
file.l:4:18: fatal error: cstdio: No such file or directory
当这个文件甚至不包含在我的项目中时,为什么它在file.l中发出错误信号(它只是用于创建我附加到项目的lex.yy.c)?我不确定这一点,但是... main()在file.tab.c中,所以这是一个入口点 - 我可以特别询问Code:Blocks用g ++编译所有内容,就像我在命令行中那样编译有机会工作吗?我有最新版本的Code:Blocks。 提前致谢
//编辑:我还可以补充说,当我从命令行编译时,我得到了同样的错误:gcc lex.yy.c.
答案 0 :(得分:1)
使C :: B项目中的所有源文件都编译为C ++,而不管文件扩展名如何
无论是否调用gcc
或g++
,都要添加选项-x c++
您的项目 - > 构建选项... - > 编译器设置 - > 其他选项。
这迫使C ++编译并且应该解决你的问题,但是如果你不清楚,那就错误了:
fatal error: cstdio: No such file or directory
发生了,因为C ++标题<cstdio>
正在编译中#include
正在编译为C,并且该头不在C编译器的包含搜索路径中。
正在根据文件的文件扩展名(.c
)选择C编译器
发生错误时编译。 -x c++
选项会覆盖此选项,但您可以
通过调查C ++标头如何发生来寻找更好的解决方案
包含在C源文件中,并在可以的情况下进行更正。
相当于<cstdio>
的C标头是<stdio.h>
。你能简单解决问题吗?
在某处将<cstdio>
更改为<stdio.h>
?如果您使用-x c++
解决方案,那么它
阻止您将源文件添加到应编译为C的项目中。
答案 1 :(得分:0)
检查项目中是否包含所有标准库文件;有关链接文件的帮助,请参阅this。
如果您包含更多详细信息,可能会更好。