Ошибка компиляции: «stddef.h: нет такого файла или каталога»

Всякий раз, когда я пытаюсь скомпилировать этот код, он всегда заканчивается этой ошибкой:

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  ^ compilation terminated. 

Код, который я пытался скомпилировать:

 #include  using namespace std; int main() { cout << "Hello World! :D"; return 0; } 

Ошибка заключается в том, что ваш пакет gcc-core и gcc-g ++ не имеют одинаковой версии. Либо снимите одну из них, чтобы решить проблему, либо обновите обе библиотеки. Рекомендуется обновлять обе библиотеки.

У меня была эта ошибка на новой установке MinGW, она не имела никакого отношения к установленным пакетам, упомянутым в текущем принятом ответе «Prasanth Karri». В моем случае проблема была вызвана «-nostdinc» в моем Makefile . Мне действительно нужен только этот флаг компилятора при создании другой целевой платформы (не при использовании MinGW), поэтому я исправил проблему, удалив этот флаг из сборки MinGW.

Когда я включил библиотеку программного обеспечения, написанную на C, в существующий демонстрационный проект (использовала библиотеку c ++ mbed), я столкнулся с этой проблемой. Демо-проект будет компилироваться просто отлично, но после того, как я заменил существующий основной файл самостоятельно, произошла эта ошибка.

На данный момент я еще не думал о том, что библиотека mbed, в которой я нуждалась, была написана на C ++. Мой собственный основной файл был .c файлом, который #include mbed заголовочный файл. В результате я использовал свой обычный источник C, как если бы это был источник C ++. Поэтому компилятором, который использовался для компиляции моего основного файла, был компилятор C. Затем этот компилятор C обнаружил #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++  "../anyfile.cpp" Finished building: ../anyfile.cpp Building file: ../main.c Invoking: MCU C Compiler arm-none-eabi-gcc  "../main.c" In file included from \mbed/mbed.h:21:0, from ../main.c:16: \mbed/platform.h:25:19: fatal error: cstddef: No such file or directory compilation terminated. 

Конечно, в среде C ++ cstddef существует , но в среде C cstddef не существует, вместо этого это реализация C stddef .

Другими словами, cstddef не существует в компиляторе C. Я решил эту проблему, переименовав файл main.c в main.cpp, а остальная часть кода тоже была скомпилирована.

TLDR / Заключение : при создании проекта на C ++ избегайте смешивания файлов C с файлами C ++ (источники и заголовки). Если возможно, переименуйте файлы .c в файлы .cpp, чтобы использовать компилятор C ++ вместо компилятора C, где это необходимо.

  • Компиляция программы на C ++ с помощью gcc
  • Почему происходит отключение функции не-void без возврата значения, не приводящего к ошибке компилятора?
  • В объектном файле слишком много разделов
  • g ++ неопределенная ссылка на typeinfo
  • Почему g ++ не может найти iostream.h?
  • constexpr инициализирует статический член, используя статическую функцию
  • Как определить, существует ли конкретная переменная-член в classе?
  • g ++ Как получить предупреждение об игнорировании возвращаемого значения функции
  • неверное преобразование из `void * 'в` char *' при использовании malloc?
  • Каковы правильные параметры ссылок для использования std :: thread в GCC под linux?
  • «Неопределенная ссылка на» в G ++ Cpp
  • Давайте будем гением компьютера.