Erreur de Compilation: "stddef.h: Aucun fichier ou répertoire"
Chaque fois que j'essaie de compiler ce code, il finit toujours avec cette erreur:
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.
le code que j'essayais de compiler est:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World! :D";
return 0;
}
3 réponses
l'erreur est due au fait que votre paquet gcc-core et gcc-g++ ne sont pas de la même version. Soit dévaloriser l'une d'entre elles pour résoudre le problème, soit mettre à jour les deux bibliothèques. Mettre à jour les deux bibliothèques est la méthode recommandée.
j'ai eu cette erreur sur une nouvelle installation de MinGW, elle n'avait rien à voir avec les paquets installés mentionnés dans la réponse actuelle acceptée par "Prasanth Karri". Dans mon cas le problème a été causé par "-nostdinc" dans mon Makefile. En fait, j'avais seulement besoin de ce drapeau de compilateur lorsque je construisais pour une plate-forme cible différente (pas en utilisant MinGW) donc j'ai corrigé le problème en retirant ce drapeau des constructions MinGW.
quand j'incorporais une bibliothèque logicielle écrite en C dans un projet de démonstration existant(j'ai utilisé une bibliothèque mped C++) j'ai rencontré ce problème. Le projet de démonstration se compilerait très bien, mais après que j'ai remplacé le fichier principal existant par le mien, cette erreur s'est produite.
a ce point je n'avais pas encore pensé au fait que la bibliothèque mbed dont j'avais besoin était écrite en C++. Mon propre fichier principal était une .c fichier #include
le mbed fichier d'en-tête. En conséquence, j'ai utilisé ma source de C normale comme si c'était un source C++. Donc le compilateur qui a été utilisé pour compiler mon fichier principal était l' compilateur C.
Ce compilateur C a alors rencontré un #include
d'un module qui en fait n'existe pas (dans son champ d'application), car ce n'est pas un compilateur C++.
ce N'est qu'après avoir inspecté la sortie du journal de construction que j'ai réalisé que les différents fichiers source C et C++ étaient compilés par Plus d'un compilateur(le compilateur c++). Le projet utilisé compilateurs utilisés arm-none-eabi-C++ et arm-none-eabi-gcc (pour les systèmes embarqués) comme indiqué ci-dessous.
compiler log:
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.
bien sûr, dans un environnement C++cstddef existe, mais dans un environnement en C cstddef n'existe pas, à la place c'est juste C de la mise en œuvre de stddef.
En d'autres termes, cstddef n'existe pas dans le compilateur C. J'ai résolu ce problème en renommant mon principal.c fichier principal.le rpc et le reste du code compilé en douceur trop.
TLDR / Conclusion: lors de la construction d'un projet C++, évitez de mélanger des fichiers C avec des fichiers C++ (sources et en-têtes). Si possible renommer .c fichiers .rpc fichiers pour utiliser le compilateur C++ au lieu du compilateur C si nécessaire.