Forum: Compiler & IDEs Espressif IDE > Compiler > stdlib.h


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jan H. (janiiix3)


Angehängte Dateien:

Lesenswert?

Mal eine Verständnisfrage,

ich möchte gerne die "soc/soc.h" einbinden.
Der Compiler sagt mir jetzt jedoch das er die "stdlib.h" nicht finden 
kann (siehe Bild) wie kann ich das verstehen?

von Oliver S. (oliverso)


Lesenswert?

Jan H. schrieb:
> wie kann ich das verstehen?

Genauso wörtlich, wie das das steht: In included file: stdlib.h not 
found

Schau halt mal in soc.h rein, was da steht.

Oliver

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Jan H. schrieb:
> Der Compiler

Das ist nicht der Compiler, nur die IDE. Diese ist Eclipse-Basiert und 
leider ziemlich schlecht darin Header zu finden. Der Compiler findet die 
aber trotzdem. Kompiliere dein Projekt und es wird wahrscheinlich 
funktionieren, und ignoriere/schließe diesen "Problems" Tab, der ist für 
C/C++ nahezu nutzlos (anders als bei Java).

: Bearbeitet durch User
von Jan H. (janiiix3)


Lesenswert?

Oliver S. schrieb:
> Jan H. schrieb:
>> wie kann ich das verstehen?
>
> Genauso wörtlich, wie das das steht: In included file: stdlib.h not
> found
> Schau halt mal in soc.h rein, was da steht.
> Oliver

Verstehe ich schon, jedoch habe ich diese nirgends eingebunden zumindest 
weiß ich nichts davon. In der soc.h wird diese auch nicht eingebunden.

von Harald K. (kirnbichler)


Lesenswert?

Niklas G. schrieb:
> Das ist nicht der Compiler, nur die IDE.

Das sagt sie sogar, da steht nämlich was von "language servers" bei der 
Fehlermeldung.
Wer daran interessiert ist, das Problem zu beseitigen, muss halt 
rausfinden, wie diese "Language Servers" bei Eclipse funktionieren und 
wie man denen den richtigen Include-Pfad verpasst.

von Jan H. (janiiix3)


Lesenswert?

Wozu gibt es Foren? Wenn man selbst nicht weiter kommt, hofft man auf 
nette und kompetente Menschen die einen weiterhelfen.

von Oliver S. (oliverso)


Lesenswert?

Jan H. schrieb:
> Verstehe ich schon, jedoch habe ich diese nirgends eingebunden zumindest
> weiß ich nichts davon. In der soc.h wird diese auch nicht eingebunden.

Auch nicht in includefiles, die soc.h inkludiert?

Oliver

von Jan H. (janiiix3)


Lesenswert?

Okay das wäre möglich.
Man kann doch sicherlich diesen Header irgendwo herunterladen und dann 
mit inkludieren oder nicht?
Ist es nicht eigentlich ein Standard Header, so wie stdint etc.?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Jan H. schrieb:
> Ist es nicht eigentlich ein Standard Header, so wie stdint etc.?

Ja. Der Header ist als Teil des Compilers bereits auf deinem Computer. 
Der Compiler findet ihn und das funktioniert. Nur Eclipse findet ihn 
nicht. Du kannst versuchen Eclipse irgendwie dazu zu bringen ihn von 
deiner Festplatte zu finden. Aber du musst ihn nicht nochmal 
runterladen. Du kannst das "Problem" aber auch einfach ignorieren, 
denn es spielt keine Rolle.

: Bearbeitet durch User
von Oliver S. (oliverso)


Lesenswert?

Niklas G. schrieb:
> Du kannst das "Problem" aber auch einfach ignorieren,
> denn es spielt keine Rolle.

Am einfachsten überlässt man das ignorieren Eclipse. Die Fehlermeldungen 
des Language Servers lassen sich im Einstellungsdialog des Fensters 
abschalten, und schon ist Ruhe.

Oliver

von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

Bei STM32 ist es auch so, dass man der auf Eclipse basierten IDE die 
Suchpfade bekannt geben muss. z.B.  so: 
http://stefanfrings.de/stm32/cube_ide.html

Bei dir geht es vielleicht ähnlich.

Suche die richtige stdlib.h auf deinem Computer und konfiguriere das 
Verzeichnis in Eclipse.

: Bearbeitet durch User
von Oliver S. (oliverso)


Lesenswert?

Sherlock 🕵🏽‍♂️ schrieb:
> Suche die richtige stdlib.h auf deinem Computer und konfiguriere das
> Verzeichnis in Eclipse.

Die wird genau stehen, wo auch stdint.h und stdbool.h zu finden sind, 
die ja der Language Server problemlos findet. Eclipse hat da einfach 
Macken.

Oliver

: Bearbeitet durch User
von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Vielleicht kann die Eclipse-IDE Includes nicht lokalisieren, wenn sie 
von einem Include includiert werden.

Eventuelle kann man dem Eclipse auf die Sprünge helfen, indem man vor 
dem
1
#include "soc/soc.h"
einfach
1
#include <stdlib.h>
einfügt. Schließlich hat's mit stdint.h ja auch geklappt. Da stdlib.h 
bestimmt auch einen Include-Guard implementert hat, sollte dieses 
zusätzliche Include jedenfalls nicht schaden.

: Bearbeitet durch Moderator
von Oliver S. (oliverso)


Lesenswert?

Frank M. schrieb:
> Vielleicht kann die Eclipse-IDE Includes nicht lokalisieren, wenn sie
> von einem Include includiert werden.

Sie könnte es schon, wenn die alle include-Pfade des Compilers auch 
richtig erkennen würde. Das läuft automatisch, und klappt auch in den 
allermeisten Fällen, aber eben nicht immer. Man könnte das jetzt von 
Hand irgendwo in den Einstellungen fixen, einfacher ist es halt, die 
ganze Syntaxprüfung durch die IDE einfach abzuschalten.

Wobei die Frage, wo da das angemeckerte include tatsächlich steht, und 
was da genau steht, ja nicht beantwortet wurde.

Oliver

von Adam P. (adamap)


Lesenswert?

Was ich mir noch vorstellen könnte,
wenn der Ersteller der soc.h/soc.c in seinem Code irgendwo etwas aus der 
stdlib verwendet hat, diese jedoch nicht einbindet, dann musst du das 
machen.

Die stdlib.h wird benötigt, sobald unteranderem eins davon im Code 
verwendet wird:
- size_t
- NULL
- atoi() und Konsorten
- ...
https://www.tutorialspoint.com/c_standard_library/stdlib_h.htm

Also mach es mal so wie Frank es schon sagte:

Frank M. schrieb:
> Eventuelle kann man dem Eclipse auf die Sprünge helfen, indem man vor
> dem
1
#include "soc/soc.h"
> einfach
1
#include <stdlib.h>
> einfügt.

von Oliver S. (oliverso)


Lesenswert?

Adam P. schrieb:
> Was ich mir noch vorstellen könnte,
> wenn der Ersteller der soc.h/soc.c in seinem Code irgendwo etwas aus der
> stdlib verwendet hat, diese jedoch nicht einbindet, dann musst du das
> machen.

Ums nochmals zu wiederholen: Das Programm kompiliert fehlerfrei. 
Lediglich die Eclipse IDE hat Probleme mit den Pfaden, und wirft daher 
diesen unberechtigten Fehler.

Da fehlt und muß im Sourcecode gar nichts.

Oliver

von Rbx (rcx)


Lesenswert?

Oliver S. schrieb:
> Lediglich die Eclipse IDE hat Probleme mit den Pfaden

Gibt es da keine andere "IDE"?

von Rolf M. (rmagnus)


Lesenswert?

Rbx schrieb:
> Oliver S. schrieb:
>> Lediglich die Eclipse IDE hat Probleme mit den Pfaden
>
> Gibt es da keine andere "IDE"?

Doch, es gibt auch andere IDEs.

von J. S. (jojos)


Lesenswert?

In Eclipse bzw dem PlugIn CDT ist dafür der Indexer zuständig. stdlib 
wird von der Compiler toolchain mitgeliefert und der Pfad wird über den 
Compiler abgerufen, da scheint etwas nicht zu passen.
Hier ist das beschrieben und wie man eine Debugausgabe dafür aktivieren 
kann:
https://www.eclipse.org/community/eclipse_newsletter/2013/october/article4.php

von 900ss (900ss)


Lesenswert?

Rolf M. schrieb:
> Doch, es gibt auch andere IDEs.

Die dann andere Probleme haben ;)

Das Abschalten der Language Server kann man machen und auch das Anzeigen 
der Fehlermeldungen. Aber dann funktioniert "goto symbol definition" 
nicht mehr. Das ist manchmal ganz hilfreich. Auch werden bei "mouse 
hover" kein Kontext mehr angezeigt bei Symbolen, die in den Headerfiles 
liegen, die nicht gefunden werden, da der Server ja abgeschaltet ist 
oder eben der Pfad nicht richtig gefunden wurde.

Und es ist richtig, das hat nichts mit dem Compiler zu tun. Der benutzt 
seine eigene Includepfade (z.B mit -I myIncludePath).
Bei dem Problem des TO  geht es nur um die Pfade für Eclipse und den 
Editor.

J. S. schrieb:
> In Eclipse bzw dem PlugIn CDT ist dafür der Indexer zuständig.

Genau :) Danke für den Link. Kannte ich auch nicht.

von Rolf M. (rmagnus)


Lesenswert?

900ss schrieb:
> Rolf M. schrieb:
>> Doch, es gibt auch andere IDEs.
>
> Die dann andere Probleme haben ;)

Das bestreite ich nicht. Es war ja nur gefragt, ob es eine andere IDE 
gibt.

> Das Abschalten der Language Server kann man machen und auch das Anzeigen
> der Fehlermeldungen.

Kann man, will man aber nicht.

> Und es ist richtig, das hat nichts mit dem Compiler zu tun. Der benutzt
> seine eigene Includepfade (z.B mit -I myIncludePath).

Ich weiß nicht, welchen Language Server Eclipse verwendet, aber mit 
clangd hat man am besten eine compile_commands.json, wo die 
Kommandozeile aller Compiler-Aufrufe des Projekts drin steht. cmake kann 
diese Datei z.B. automatisch generieren. Alternativ gibt es auch noch 
Konfigurationsdateien für allgemeine Optionen für das ganze Projekt und 
Umgebungsvariablen, aus denen er die Einstellungen lesen kann (*). 
Allerdings würde ich erwarten, dass man das auch direkt von der IDE aus 
konfigurieren kann.

(*) https://clangd.llvm.org/config#compileflags

von 900ss (900ss)


Lesenswert?

Rolf M. schrieb:
> Kann man, will man aber nicht.

Ich hatte doch die Nachteile beschrieben. Kann dann doch jeder selbst 
entscheiden!

von Oliver S. (oliverso)


Lesenswert?

900ss schrieb:
> Das Abschalten der Language Server kann man machen

Soll man ja gar nicht. Man soll nur die Anzeige der Fehlermeldungen vom 
Language Server abschalten.

Oliver

von 900ss (900ss)


Lesenswert?

Oliver S. schrieb:
> Soll man ja gar nicht.


900ss schrieb:
> Rolf M. schrieb:
>> Kann man, will man aber nicht.
>
> Ich hatte doch die Nachteile beschrieben. Kann dann doch jeder selbst
> entscheiden!

Ja richtig, es lassen sich auch nur die Anzeige der Fehler abschalten.

Man kann sich in Eclipse blöd konfigurieren ;)

von Rolf M. (rmagnus)


Lesenswert?

Man könnte auch einfach die Konfiguration korrigieren, so dass der 
Language-Server richtig arbeiten kann. Die Fehlermeldungen sind dann ja 
durchaus hilfreich. Wenn der Language-Server die Header nicht finden 
kann, werden auch die anderen Funktionen nicht mehr richtig arbeiten.
Aber klar, jeder wie er will.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.