Error de comstackción: “stddef.h: no existe tal archivo o directorio”

Cada vez que trato de comstackr este código siempre termina con este error:

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

El código que estaba tratando de comstackr es:

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

El error se debe a que su paquete gcc-core y gcc-g ++ no son de la misma versión. O baje la calificación de uno de ellos para resolver el problema o actualice ambas bibliotecas. La actualización de ambas bibliotecas es la manera recomendada.

Tuve este error en una nueva instalación de MinGW, no tenía nada que ver con los paquetes instalados mencionados en la respuesta aceptada actual por “Prasanth Karri”. En mi caso, el problema fue causado por “-nostdinc” en mi Makefile . De hecho, solo necesitaba el indicador del comstackdor cuando creé para una plataforma de destino diferente (no cuando usaba MinGW), así que resolví el problema eliminando ese indicador de las comstackciones de MinGW.

Cuando estaba incorporando una biblioteca de software escrita en C en un proyecto de demostración existente (usé una biblioteca C ++ mbed) encontré este problema. El proyecto de demostración comstackría muy bien, pero después de que reemplacé el archivo principal existente por mi cuenta, se produjo este error.

En este punto, aún no había pensado en el hecho de que la biblioteca mbed que necesitaba estaba escrita en C ++. Mi propio archivo principal era un archivo .c que #include el archivo de encabezado mbed. Como resultado, utilicé mi fuente de C normal como si fuera una fuente de C ++. Por lo tanto, el comstackdor que se utilizó para comstackr mi archivo principal fue el comstackdor de C. Este comstackdor de C encontró un #include de un módulo que en realidad no existe (dentro de su scope), ya que no es un comstackdor de C ++.

Solo después de inspeccionar el resultado del registro de comstackción, me di cuenta de que varios comstackdores C y C ++ comstackban más de un comstackdor (el comstackdor de C ++). El proyecto utilizó comstackdores usados ​​arm-none-eabi-c ++ y arm-none-eabi-gcc (para sistemas integrados) como se ve a continuación.

Registro de comstackción:

 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 comstacktion terminated. 

Por supuesto, en un entorno C ++ existe cstddef , pero en un entorno C cstddef no existe, en lugar de eso es solo la implementación de C de stddef .

En otras palabras, cstddef no existe en el comstackdor de C. Resolví este problema cambiando el nombre de mi archivo main.c a main.cpp y el rest del código comstackdo sin problemas también.

TLDR / Conclusión : al crear un proyecto de C ++, evite mezclar archivos C con archivos C ++ (fonts y encabezados). Si es posible, cambie el nombre de los archivos .c a archivos .cpp para usar el comstackdor C ++ en lugar del comstackdor C cuando sea necesario.