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?
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
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
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.
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.
Wozu gibt es Foren? Wenn man selbst nicht weiter kommt, hofft man auf nette und kompetente Menschen die einen weiterhelfen.
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
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.?
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
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
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
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
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
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
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.
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
Oliver S. schrieb: > Lediglich die Eclipse IDE hat Probleme mit den Pfaden Gibt es da keine andere "IDE"?
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.
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
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.
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
Rolf M. schrieb: > Kann man, will man aber nicht. Ich hatte doch die Nachteile beschrieben. Kann dann doch jeder selbst entscheiden!
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
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 ;)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.