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.