portable c++ g++ cygwin

c++ - cygwin portable



Error de compilación: "stddef.h: no existe tal archivo o directorio" (4)

Cuando estaba incorporando una biblioteca de software escrita en C en un proyecto de demostración existente (utilicé una biblioteca m ++ de C ++) me encontré con este problema. El proyecto de demostración se compilaría bien, pero después de que reemplacé el archivo principal existente por el mío, 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 C normal como si fuera una fuente C ++. Por lo tanto, el compilador que se utilizó para compilar mi archivo principal fue el compilador de C. Este compilador de C encontró un #include de un módulo que en realidad no existe (dentro de su alcance), ya que no es un compilador de C ++.

Solo después de inspeccionar la salida del registro de compilación me di cuenta de que varios archivos C y C ++ de origen fueron compilados por más de 1 compilador (el compilador de C ++). El proyecto utilizó compiladores usados ​​arm-none-eabi-c ++ y arm-none-eabi-gcc (para sistemas integrados) como se ve a continuación.

Compilar registro:

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.

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

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

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

Cada vez que intento compilar 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 <stddef.h> ^ compilation terminated.

El código que intentaba compilar es:

#include <iostream> 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. Puede degradar uno de ellos para resolver el problema o actualizar ambas bibliotecas. La actualización de ambas bibliotecas es la forma recomendada.


Este problema se resolvió cuando instalé codeblocks con el compilador mingw, luego copié la carpeta mingw de codeblocks a la unidad C y agregué C/mingw/bin a las variables de entorno.


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