g++: fatal error: stddef.h: No such file or directory?
Hallo,
Wenn ich diesen Code mit g++ compilieren lasse,
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
return 0;
}
Erscheint diese Fehlermeldung:
In file included from /home/tisin/Documents/Programming/C++/.apt/usr/include/c++/9/cwchar:44,
from /home/tisin/Documents/Programming/C++/.apt/usr/include/c++/9/bits/postypes.h:40,
from /home/tisin/Documents/Programming/C++/.apt/usr/include/c++/9/iosfwd:40,
from /home/tisin/Documents/Programming/C++/.apt/usr/include/c++/9/ios:38,
from /home/tisin/Documents/Programming/C++/.apt/usr/include/c++/9/ostream:38,
from /home/tisin/Documents/Programming/C++/.apt/usr/include/c++/9/iostream:39,
from t.cpp:1:
/usr/include/wchar.h:35:10: fatal error: stddef.h: No such file or directory
35 | #include <stddef.h>
| ^~~~~~~~~~
compilation terminated.
Ich habe g++ lokal installiert.
Kann mir jemand helfen? Danke im Vorraus!
Hier eine kurze Beschreibung:
Der Compiler versucht den lokalen Header 'postypes.h' zu importieren, welcher wiederrum den Header lokalen 'cwchar' versucht, zu importieren, welcher dann den globalen Header 'wchar.h' versucht, zu importieren, welcher versucht, 'stddef.h' zu importieren. Das Problem ist, 'stddef.h' bei mir nicht.
3 Antworten
Ich habe g++ lokal installiert.
Präzisiere.
stddef.h ist sowohl ein Systemheader, als auch ein Header der Teil des gcc ist. Bei wchar.h sieht das ähnlich aus.
# locate stddef.h
/usr/include/linux/stddef.h
/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include/stddef.h
sowie:
# locate wchar.h
/usr/include/wchar.h
/usr/include/bits/wchar.h
/usr/include/bits/wctype-wchar.h
/usr/include/bsd/wchar.h
/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/include/g++-v11/tr1/wchar.h
Das Problem ist, daß die Standardsuchpfade natürlich anders festgelegt sind, egal wohin Du gcc(g++) entpackst:
echo | g++ -E -Wp,-v -
Sollte Dir anzeigen, wo g++ die Header sucht. mit -I kannst Du Suchpfade angeben.
Mehr zum Thema Suchpfade findest DU in der manpage/Dokumentation.
Okay, ich habe die Header jetzt alle in mein Lokalen-Header-Verzeichnis gepackt. Funktioniert jetzt alles.
Du gerwechselst C mit C++!
Bei C:
#include <stddef.h>
Bei C++:
#include <cstddef>
Hmmm... Komisch, bei meinen g++ standard Libraries, in iostream, und die darauf Folgenden, wird <stddef.h> importiert.
fehlt.
Evtl in den Suchpfad kopieren.
Oder neuen Suchpfad definieren
Das sollte bei Deiner Entwicklungsumgebung mit dabei sein. Ansonsten suche im Internet.
Ich habe das Problem jetzt gelöst, danke für deine Hilfe!
Ich habe mir die g++ .deb packages heruntergeladen und sie in ein lokales Verzeichnis, '.apt', gepackt. Die Header sind in '~/.apt/usr/include/c++/9' gespeichert.
Jedenfalls habe ich es jetzt aus dem gcc Quellcode heruntergeladen.
Danke für die Hilfe!