Ошибка компиляции: «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, где это необходимо.

  • Как определить, откуда включен заголовочный файл?
  • Выход из файла makefile
  • std :: enable_if условно скомпилировать функцию-член
  • В объектном файле слишком много разделов
  • Как указать предпочтение пути библиотеки?
  • Какова цель использования -патентной в компиляторе GCC / G ++?
  • cygwin g ++ std :: stoi "error: 'stoi' не является членом 'std
  • Как создать статическую библиотеку с g ++?
  • Почему g ++ не может найти iostream.h?
  • cc1plus: ошибка: непризнанная опция командной строки «-std = c ++ 11» с g ++
  • g ++ не показывает «неиспользуемое» предупреждение
  • Interesting Posts

    Как подключить два локально связанных компьютера к WIFI с помощью адресации IPv4?

    Какое максимальное поддерживаемое аппаратное ОЗУ в Windows 32-бит?

    Есть ли способ сделать подтверждение по электронной почте для создания пользователей Firebase и / или сброса пароля?

    Как анализировать использование диска в командной строке linux?

    Может ли неправильный размер программы указывать вредоносное ПО?

    Как преобразовать свойство в MongoDB из текста в дату?

    Как узнать, какую версию Linux я запускаю?

    статический статический URL-адрес django

    Должен ли быть объявлен «статический конечный регистратор» в ВЕРХНЕЙ ЧАСТИ?

    Нет мыши во время установки Windows 7

    Возможно ли воспроизводить streamи интернет-радиосигналов shoutcast с помощью html5?

    Выполнение команд командного файла Windows асинхронно

    АБР не отвечает. Вы можете подождать больше или убить процесс «adb.exe» вручную и нажать «Перезапустить»,

    Как «щелкнуть средним щелчком» по новым макроблокам

    java.lang.LinkageError: javax.servlet.jsp.JspApplicationContext.getExpressionFactory

    Давайте будем гением компьютера.