50
votes

Whenever I try to compile this code it always ends up with this error:

    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.

The code I was trying to compile is:

#include <iostream>
using namespace std;

int main()
{
    cout << "Hello World! :D";
    return 0;
}
6
How are you compiling it?Chol Nhial
try g++ file.cc where file.cc is the name of yoru file (should end in .cc or .cpp). If you still get the same error then your compiler installation is broken; fire up the Cygwin installer and refresh your installation of g++. Check that gcc and glibc are up to date also.M.M
@Chol Nhial I compile the code with using the command: g++ test.cpp I also tried g++ test.cpp -o main.Louie
@Matt McNabb: I've re-installed g++ but it still gives me that error, where can I find the gcc and glibc?Louie
In the cygwin installer, same page as g++M.M

6 Answers

78
votes

The error is because your gcc-core package and gcc-g++ are not of the same version. Either downgrade one of them to solve the problem or update both the libraries. Updating both the libraries is the recommended way.

4
votes

I had this error on a fresh MinGW install, it had nothing to do with the installed packages mentioned in the current accepted answer by "Prasanth Karri". In my case the issue was caused by -nostdinc in my Makefile. I actually only needed that compiler flag when building for a different target platform (not when using MinGW) so I fixed the issue by removing that flag from MinGW builds.

2
votes

When I was incorporating a software library written in C into an existing demo project(used a C++ mbed library) I encountered this problem. The demo project would compile just fine, but after I replaced the existing main file by my own, this error occurred.

At this point I hadn't yet thought about the fact that the mbed library that I needed was written in C++. My own main file was a .c file that #include the mbed header file. As a result I used my normal C source as if it was a C++ source. Therefore the compiler that was used to compile my main file was the C compiler. This C compiler then encountered a #include of a module that actually does not exist (within its scope), as it's not a C++ compiler.

Only after I inspected the output of the build log I realised the various source C and C++ files were compiled by more that 1 compiler(the c++ compiler). The project used used compilers arm-none-eabi-c++ and arm-none-eabi-gcc (for embedded systems) as seen below.

Compile log:

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.

Of course in a C++ environment cstddef exists, but in a C environment cstddef doesn't exist, in stead it's just C's implementation of stddef.

In other words, cstddef does not exist in the C compiler. I resolved this problem by renaming my main.c file to main.cpp and the rest of the code compiled smoothly too.

TLDR/Conclusion: When building a C++ project, avoid mixing C files with C++ files(sources and headers). If possible rename .c files to .cpp files to use the C++ compiler in stead of the C compiler where required.

1
votes

If you try to compile and see a message like, "fatal error: stddef.h: No such file or directory", the error is because your gcc-core and gcc-g++ packages are not of the same version. Rerun the Cygwin install and make sure that you select the highest numbered versions of gcc-core and gcc-g++.

1
votes

In order to update it, follow below. If you are on Windows, just run these on command prompt or powershell

Update the package list: mingw-get update

After updating the package list, run: mingw-get upgrade

Source: How to update GCC in MinGW on Windows?

-1
votes

This problem was solved for me as I installed codeblocks with mingw compiler then I copied the mingw folder from codeblocks to C drive and added C\mingw\bin to the environment variables.