g++: fatal error: stddef.h: No such file or directory?


29.05.2021, 00:11

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
ItachiUchihaLX 
Fragesteller
 29.05.2021, 11:13
Präzisiere.

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.

# locate stddef.h

/usr/include/linux/stddef.h
/usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h
/usr/src/linux-headers-5.4.0-58/include/linux/stddef.h
/usr/src/linux-headers-5.4.0-58/include/uapi/linux/stddef.h
/usr/src/linux-headers-5.4.0-72/include/linux/stddef.h
/usr/src/linux-headers-5.4.0-72/include/uapi/linux/stddef.h

+ In anderen Apps 
#locate wchar.h

~/.apt/usr/include/c++/9/wchar.h
~/.apt/usr/include/c++/9/bits/wchar.h
~/.apt/usr/include/c++/9/tr1/wchar.h
/usr/include/wchar.h
/usr/include/x86_64-linux-gnu/bits/wchar.h
/usr/include/x86_64-linux-gnu/bits/wctype-wchar.h

+ In anderen Apps

Jedenfalls habe ich es jetzt aus dem gcc Quellcode heruntergeladen.

Danke für die Hilfe!

0
KarlRanseierIII  29.05.2021, 11:53
@ItachiUchihaLX

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.

1
ItachiUchihaLX 
Fragesteller
 29.05.2021, 13:13
@KarlRanseierIII

Okay, ich habe die Header jetzt alle in mein Lokalen-Header-Verzeichnis gepackt. Funktioniert jetzt alles.

0

Du gerwechselst C mit C++!

Bei C:

#include <stddef.h>

Bei C++:

#include <cstddef>
Woher ich das weiß:Berufserfahrung
ItachiUchihaLX 
Fragesteller
 29.05.2021, 11:05

Hmmm... Komisch, bei meinen g++ standard Libraries, in iostream, und die darauf Folgenden, wird <stddef.h> importiert.

0
stddef.h

fehlt.

Evtl in den Suchpfad kopieren.

Oder neuen Suchpfad definieren