c++ 编译错误:"stddef. h:无此类文件或目录"

xfyts7mz  于 2023-02-01  发布在  其他
关注(0)|答案(7)|浏览(928)

每当我试图编译这段代码时,总是以这个错误结束:

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

kgsdhlau1#

此错误是因为您的gcc-core软件包和gcc-g++的版本不同。请降低其中一个的版本以解决此问题,或者同时更新两个库。建议同时更新两个库。

8nuwlpux

8nuwlpux2#

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

8ljdwjyq

8ljdwjyq3#

当我将一个用C编写的软件库合并到一个现有的演示项目中时(使用C++ mbed库),我遇到了这个问题。演示项目可以编译得很好,但是当我用自己的主文件替换现有的主文件后,这个错误发生了。
在这一点上,我还没有想到我需要的mbed库是用C编写的。我自己的主文件是一个.c文件,#include mbed头文件。因此,我使用我的普通C源代码,就像它是一个C源代码一样。因此,用于编译我的主文件的编译器是 *C编译器 *。这个C编译器然后遇到模块that actually does not exist#include(在它的作用域内),因为它不是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环境中cstddef不存在,in stead it's just C's implementation of stddef
换句话说,cstddef在C编译器中不存在。我通过将main.c文件重命名为main.cpp解决了这个问题,其余代码也顺利编译。

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

3wabscal

3wabscal4#

为了更新它,请按照下面的步骤操作。如果你在Windows上,只需在命令提示符或powershell上运行这些命令
更新程序包列表:mingw-get update
更新程序包列表后,运行:mingw-get upgrade
来源:How to update GCC in MinGW on Windows?

jhiyze9q

jhiyze9q5#

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

e1xvtsh3

e1xvtsh36#

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

pxyaymoc

pxyaymoc7#

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

相关问题