Compilation error: “stddef.h: No such file or directory”

后端 未结 6 1022
醉梦人生
醉梦人生 2020-11-28 10:11

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/i68         


        
相关标签:
6条回答
  • 2020-11-28 10:41

    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.

    0 讨论(0)
  • 2020-11-28 10:49

    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.

    0 讨论(0)
  • 2020-11-28 10:54

    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++.

    0 讨论(0)
  • 2020-11-28 10:59

    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?

    0 讨论(0)
  • 2020-11-28 11:01

    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.

    0 讨论(0)
  • 2020-11-28 11:08

    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.

    0 讨论(0)
提交回复
热议问题