Ответ 1
Ошибка заключается в том, что ваш пакет gcc-core и gcc-g++ не имеют одинаковой версии. Либо снимите одну из них, чтобы решить проблему, либо обновите обе библиотеки. Рекомендуется обновлять обе библиотеки.
Всякий раз, когда я пытаюсь скомпилировать этот код, он всегда заканчивается этой ошибкой:
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;
}
Ошибка заключается в том, что ваш пакет gcc-core и gcc-g++ не имеют одинаковой версии. Либо снимите одну из них, чтобы решить проблему, либо обновите обе библиотеки. Рекомендуется обновлять обе библиотеки.
У меня была эта ошибка при новой установке MinGW, она не имела ничего общего с установленными пакетами, упомянутыми в текущем принятом ответе "Prasanth Karri". В моем случае проблема была вызвана -nostdinc
в моем Makefile. На самом деле этот флаг компилятора мне был нужен только при сборке для другой целевой платформы (не при использовании MinGW), поэтому я исправил проблему, удалив этот флаг из сборок MinGW.
Когда я включил библиотеку программного обеспечения, написанную на C, в существующий демонстрационный проект (использовала библиотеку С++ mbed), я столкнулся с этой проблемой. Демо-проект будет компилироваться просто отлично, но после того, как я заменил существующий основной файл самостоятельно, произошла эта ошибка.
В этот момент я еще не думал о том, что библиотека mbed, в которой я нуждалась, была написана на С++. Мой собственный основной файл был .c файлом, который #include
mbed заголовочный файл. В результате я использовал свой обычный источник C, как если бы это был источник С++. Поэтому компилятором, который использовался для компиляции моего основного файла, был компилятор C.
Затем этот компилятор C встретил #include
модуля который на самом деле не существует (в пределах его области действия), поскольку он не является компилятором С++.
Только после того, как я проверил вывод журнала построения, я понял, что различные исходные файлы C и С++ были скомпилированы более чем одним компилятором (компилятором С++). В проекте использовались компиляторы arm-none-eabi-С++ и 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.
Конечно, в среде С++ cstddef существует, но в среде C cstddef не существует, вместо того, чтобы просто реализовать C stddef.
Другими словами, cstddef не существует в компиляторе C. Я решил эту проблему, переименовав файл main.c в main.cpp, а остальная часть кода тоже была скомпилирована.
TL;DR/Заключение. При создании проекта на С++ избегайте смешивания файлов C с файлами С++ (источники и заголовки). Если возможно, переименуйте файлы .c в файлы .cpp, чтобы использовать компилятор С++ вместо компилятора C, где это необходимо.
Эта проблема была решена для меня, когда я установил codeblocks
с компилятором mingw, затем скопировал папку mingw из кодовых блоков на диск C и добавил
C\mingw\bin
к переменным среды.