代码之家  ›  专栏  ›  技术社区  ›  Louie

编译错误:“stddef.h:没有这样的文件或目录”

  •  52
  • Louie  · 技术社区  · 11 年前

    每当我试图编译这段代码时,总是会出现以下错误:

        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;
    }
    
    7 回复  |  直到 10 年前
        1
  •  80
  •   thisizkp    10 年前

    错误是因为您的gcc核心包和gcc-g++不是同一版本。要么降级其中一个以解决问题,要么更新两个库。建议同时更新两个库。

        2
  •  5
  •   Toby Speight    7 年前

    我在一次新的MinGW安装中遇到了这个错误,它与“Prasanth Karri”当前接受的答案中提到的已安装软件包无关。就我而言 问题是由 -nostdinc 在我的Makefile中 实际上,我只需要在为不同的目标平台构建时(而不是在使用MinGW时)使用该编译器标志,所以我通过从MinGW构建中删除该标志来解决这个问题。

        3
  •  2
  •   Gilrain    8 年前

    当我将一个用C编写的软件库合并到一个现有的演示项目中(使用C++mbed库)时,我遇到了这个问题。这个演示项目可以很好地编译,但是在我用自己的主文件替换了现有的主文件之后,出现了这个错误。

    此时,我还没有想到我需要的mbed库是用C++编写的。我自己的主文件是一个.c文件 #include mbed头文件。结果,我使用了普通的C源代码,就好像它是C++源代码一样。因此,用于编译主文件的编译器是 C编译器 . 此C编译器随后遇到 #包括 模块的 that actually does not exist (在其范围内),因为它不是C++编译器。

    只有在我检查了构建日志的输出之后,我才意识到各种源C和C++文件是由不止一个编译器(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环境中cstdef不存在, in stead it's just C's implementation of stddef .

    换句话说,cstdef在C编译器中不存在。 我通过重命名主机来解决这个问题。c文件到main。cpp和其他代码也顺利编译。

    TLDR/结论 :在构建C++项目时,避免将C文件与C++文件(源文件和头文件)混合。如果可能的话 将.c文件重命名为.cpp 文件,以便在需要时使用C++编译器而不是C编译器。

        4
  •  2
  •   Dimenein    6 年前

    要更新它,请遵循以下步骤。 如果您在Windows上,只需在命令提示符或powershell上运行这些

    更新软件包列表: mingw-get update

    更新包列表后,运行: mingw-get upgrade

    资料来源: How to update GCC in MinGW on Windows?

        5
  •  0
  •   Felix Lemke    7 年前

    这个问题在我安装时就解决了 codeblocks 使用mingw编译器,然后我将mingw文件夹从代码块复制到C驱动器并添加 C\mingw\bin 环境变量。

        6
  •  0
  •   Yonina Ab    6 年前

    如果您尝试编译并看到类似“致命错误:stddef.h:没有这样的文件或目录”的消息,则错误是因为您的gcc核心和gcc-g++包不是同一版本。重新运行Cygwin安装,并确保选择了编号最高的gcc-core和gcc-g++版本。

        7
  •  0
  •   georbbtz    4 年前

    在用MinGW安装C++编译器后,我也遇到了这个问题。显然,您还必须安装mingw32 base。转到C:\MinGW/bin/MinGW-get。exe(我的路径),并在“基本设置”选项卡上检查其安装情况。

    推荐文章