每当我尝试编译此代码时,它总是会出现此错误:
In file included from /usr/include/wchar.h:6:0,
from /usr/lib/gcc/i686-pc-cygwin/4.9.2/include/c++/cwchar:44,
from /usr/lib/gcc/i686-pc-cygwin/4.9.2/include/c++/bits/postypes.h:40,
from /usr/lib/gcc/i686-pc-cygwin/4.9.2/include/c++/iosfwd:40,
from /usr/lib/gcc/i686-pc-cygwin/4.9.2/include/c++/ios:38,
from /usr/lib/gcc/i686-pc-cygwin/4.9.2/include/c++/ostream:38,
from /usr/lib/gcc/i686-pc-cygwin/4.9.2/include/c++/iostream:39,
from test.cpp:1:
/usr/include/sys/reent.h:14:20: fatal error: stddef.h: No such file or directory
#include <stddef.h>
^
compilation terminated.
我试图编译的代码是:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World! :D";
return 0;
}
答案 0 :(得分:60)
错误是因为您的gcc-core软件包和gcc-g ++的版本不同。要么降级其中一个以解决问题或更新两个库。建议更新两个库。
答案 1 :(得分:2)
我在一个新的MinGW安装上遇到了这个错误,它与当前接受的答案中提到的安装包没有任何关系,&#34; Prasanth Karri&#34;。在我的情况下问题是由&#34; -nostdinc&#34;在我的Makefile中。实际上,在构建不同的目标平台时(不是在使用MinGW时)我只需要那个编译器标志,所以我通过从MinGW构建中删除该标志来修复该问题。
答案 2 :(得分:2)
当我将用C编写的软件库合并到现有的演示项目(使用C ++ mbed库)时,我遇到了这个问题。演示项目编译得很好,但在我用自己的替换现有主文件后,发生了这个错误。
此时我还没有想到我需要的mbed库是用C ++编写的。我自己的主文件是。#include
mbed头文件的.c文件。结果我使用了我的普通C源,就像它是一个C ++源代码一样。因此,用于编译主文件的编译器是 C编译器。
然后,这个C编译器遇到了#include
模块that actually does not exist(在其范围内),因为它不是C ++编译器。
只有在我检查了构建日志的输出后,才意识到各种源C和C ++文件是由更多的1编译器(c ++编译器)编译的。该项目使用了编译器arm-none-eabi-c ++和arm-none-eabi-gcc(用于嵌入式系统),如下所示。
编译日志:
Building file: ../anyfile.cpp
Invoking: MCU C++ Compiler
arm-none-eabi-c++ <A lot of arguments> "../anyfile.cpp"
Finished building: ../anyfile.cpp
Building file: ../main.c
Invoking: MCU C Compiler
arm-none-eabi-gcc <A lot of arguments> "../main.c"
In file included from <Project directory>\mbed/mbed.h:21:0,
from ../main.c:16:
<Project directory>\mbed/platform.h:25:19: fatal error: cstddef: No such file or directory
compilation terminated.
当然,在C ++环境cstddef exists中,但在C环境中,cstddef不存在,in stead it's just C's implementation of stddef。
换句话说,C编译器中不存在cstddef。 我通过将main.c文件重命名为main.cpp解决了这个问题,其余代码也顺利编译。
TLDR /结论:构建C ++项目时,请避免将C文件与C ++文件(源和标头)混合。如果可能,将.c文件重命名为.cpp 文件,以便在需要时使用C ++编译器代替C编译器。
答案 3 :(得分:1)
如果您尝试编译并看到诸如“致命错误:stddef.h:无此类文件或目录”之类的消息,则该错误是因为您的gcc-core和gcc-g ++软件包的版本不同。重新运行Cygwin安装程序,并确保选择编号最高的gcc-core和gcc-g ++版本。
答案 4 :(得分:1)
为了进行更新,请按照以下说明进行操作。 如果您使用的是Windows,则只需在命令提示符或Powershell上运行它们
更新软件包列表:mingw-get update
更新软件包列表后,运行:mingw-get upgrade
答案 5 :(得分:-1)
当我使用mingw编译器安装codeblocks
时为我解决了此问题,然后将mingw文件夹从代码块复制到C驱动器并添加了
C\mingw\bin
到环境变量。