【问题标题】:Compilation error: "stddef.h: No such file or directory"编译错误:“stddef.h:没有这样的文件或目录”
【发布时间】:2015-10-14 12:57:48
【问题描述】:

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

    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;
}

【问题讨论】:

  • 你是怎么编译的?
  • 尝试g++ file.cc 其中file.cc 是yoru 文件的名称(应以.cc.cpp 结尾)。如果您仍然遇到相同的错误,那么您的编译器安装已损坏;启动 Cygwin 安装程序并刷新 g++ 的安装。检查gccglibc 是否也是最新的。
  • @Chol Nhial 我使用以下命令编译代码:g++ test.cpp 我还尝试了 g++ test.cpp -o main。
  • @Matt McNabb:我已经重新安装了 g++,但它仍然给我这个错误,我在哪里可以找到 gcc 和 glibc?
  • 在 cygwin 安装程序中,与 g++ 相同的页面

标签: c++ g++ cygwin


【解决方案1】:

在使用 MinGW 安装 C++ 编译器后,我也遇到了这个问题。显然,您还必须安装 mingw32-base。转到 C:/MinGW/bin/mingw-get.exe(我的路径)并在 Basic Setup 选项卡中检查它的安装。

【讨论】:

    【解决方案2】:

    要更新它,请按照以下说明进行操作。 如果您在 Windows 上,只需在命令提示符或 powershell 上运行这些

    更新包列表:mingw-get update

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        【解决方案5】:

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

        【讨论】:

        • “Prasanth Karri”的答案在哪里?
        • 可能仍然被接受的answer by "ThisIzKp"。抱歉,过去的我觉得没有必要链接它。 :-(
        【解决方案6】:

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

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

        【讨论】:

          【解决方案7】:

          这个错误是因为你的 gcc-core 包和 gcc-g++ 不是同一个版本。要么降级其中一个以解决问题,要么更新两个库。更新这两个库是推荐的方法。

          【讨论】:

          • 这怎么可能?安装程序如何在全新安装时安装错误版本的软件包?另外你如何执行更新?我正在再次运行安装程序,但似乎没有更新任何内容的选项。
          • 如果您使用的是Babunpact update gcc-core gcc-g++
          • 今天仍然相关 - 第一次在现有的 Cygwin 安装上安装了 gcc-core 和 gcc-g++,它安装了 gcc-g++ 的后级版本,我不得不重新运行安装程序。 exe 并对其进行了更新。
          • cygwin 包管理器 apt-cyg 或 sage:sage remove gcc-core gcc-g++ &amp;&amp; sage install gcc-core gcc-g++
          • 如果您使用的是 Babun 并且 @nishpatel 的答案对您不起作用,请尝试同时运行 pact update cygwin-devel
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-21
          • 2012-04-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多