Ich habe CDT für Eclipse eingerichtet und ein einfaches Hallo-Welt-C-Programm geschrieben:
#include <stdio.h>
int main(void){
puts("Hello, world.");
return 0;
}
Das Programm wird korrekt erstellt und ausgeführt, aber Eclipse zeigt dieses gelbe Fragezeichen neben der Einschlussanweisung an, die besagt, "Unresolved inclusion: <stdio.h>"
wenn ich mit der Maus darüber fahre.
Es hat keinen Einfluss auf die Ausführung des Programms, aber ich finde es ziemlich nervig.
Hat jemand eine Idee, wie man es entfernt?
c
eclipse
eclipse-cdt
standard-library
Derrick Zhang
quelle
quelle
Antworten:
Der von Eclipse verwendete Compiler kann die Symbole einwandfrei auflösen, sodass der Code einwandfrei kompiliert wird.
Der von Eclipse verwendete Code-Vervollständigungs- / Indexer oder Präprozessor weiß jedoch nicht, wo er
stdio.h
vorhanden ist.Sie müssen den Dateisystempfad angeben, in dem sich der Pfad
stdio.h
befindet.Die Eclipse-Dokumentation beschreibt dies in mehreren Abschnitten für den Compiler:
Und wenn der Code-Vervollständiger / Indexer oder Präprozessor speziell auch nicht finden kann
stdio.h
:Der genaue Speicherort
stdio.h
hängt von dem System ab, für das Sie den Code schreiben möchten. Wenn Sie Code für dasselbe System schreiben, auf dem Sie Eclipse ausführen, ist der Standardspeicherort/usr/include/stdio.h
Linux, MacOS, Cygwin usw.Wenn Sie für ein separates / Remote-Zielsystem (z. B. Android, Raspberry Pi, STM32) Cross-Compilieren, befindet es sich irgendwo in dem SDK, das Sie für dieses System installiert haben. Sie müssen sich auf diese spezielle SDK-Dokumentation beziehen.
quelle
Ich fand diese Antworten (einschließlich der akzeptierten) etwas kryptisch.
Für mich musste ich den Pfad hinzufügen, in dem sich stdio.h befindet (wie @ardnew sagte). In Eclipse öffnen Sie die Eigenschaften Ihres Projekts, erweitern "C / C ++ General" und wählen "Pfade und Symbole".
Stellen Sie sicher, dass Sie das
include
Verzeichnis für jede von Ihnen verwendete Sprache hinzugefügt haben . (In meinem Fall musste ich es nur zu GNU C ++ hinzufügen.)quelle
/usr/bin/xcode-select --install
Anschließend können Sie Eclipse auf/usr/include/
Ich habe gerade die Wissensdatenbank erweitert und dies auf Win7 mit Cygwin gemacht.
Das scheint für mich zu funktionieren.
Pfade für c einschließen:
Pfade für c ++ einschließen:
Das bringt mir eine saubere Zusammenstellung von Hallo Welt.
quelle
Gehen Sie zu Projekt> Eigenschaften> C / C ++ Allgemein> Präprozessor-Includes> Anbieter und wählen Sie beide aus:
Wählen Sie für jeden von ihnen auch den Untereintrag aus: "Globalen Anbieter verwenden, der von Projekten gemeinsam genutzt wird".
Getestet auf Eclipse 4.8.0 in Ubuntu 16.04 mit einer C- und einer C ++ - Hallo-Welt.
quelle
Es kann das Problem lösen. (Entschuldigung für schlechtes Englisch)
quelle
Ich verwende Eclipse mit Cygwin und das hat bei mir funktioniert:
Gehen Sie zu Projekt> Eigenschaften> C / C ++ Allgemein> Präprozessor enthält ...> Anbieter und wählen Sie "Integrierte CDT GCC-Compilereinstellungen Cygwin [Shared]".
quelle
Ich arbeite mit mehreren Cross-Compiler-Konfigurationen , bei denen ich unterschiedliche Speicherorte für die STD-Header-Dateien (und andere Umgebungsvariablen) verwenden muss.
Die Lösung bestand darin, den Indexer so einzurichten, dass er die aktive Konfiguration verwendet.
Leider wird die Option aufgrund eines Fehlers in Eclipse nicht lokal gespeichert. Sie müssen daher die Arbeitsbereichskonfiguration verwenden, wenn Sie die Konfiguration speichern möchten, wenn Sie Eclipse erneut öffnen.
Fenster -> Einstellungen -> C / C ++ -> Indexer -> Aktive Build-Konfiguration verwenden
Dadurch verwendet Eclipse den richtigen Compiler, der mit der aktiven Cross GCC-Konfiguration des Projekts festgelegt wurde.
quelle
Wie in den oberen Antworten angegeben, muss angegeben werden, wo sich die Build-Ordner befinden. Diese können über einen Dialog hinzugefügt werden, der durch Klicken mit der rechten Maustaste auf das Projekt und Auswahl von Eigenschaften-> C / C ++ Allgemein-> Pfade und Symbole erreicht wird.
Die verbleibende Frage ist, welche Pfade hinzugefügt werden müssen.
Wenn Sie gcc für den Befehlszeilenzugriff korrekt eingerichtet haben und wissen möchten, welche Standard-Include-Pfade verwendet werden, fragen Sie einfach danach. Verwenden Sie je nach der Sprache, an der Sie interessiert sind:
... hier werden die Standard-Compilereinstellungen aufgelistet, die beim Aufrufen von gcc verwendet werden (und dieser Befehl funktioniert auch, wenn "gcc" wirklich ein Alias für clang ist, wie unter OSX).
Unten wird die Liste der Include-Verzeichnisse angezeigt:
Wenn Sie die hier aufgeführten Verzeichnisse in der angegebenen Reihenfolge in das Dialogfeld "Pfade und Symbole" von Eclipse eingeben, sollte Eclipse CDT in der Lage sein, die Standardheader und möglicherweise einige zusätzliche Header zu finden, die für Ihr Betriebssystem spezifisch sind.
(Dank an Devnulls Antwort auf eine verwandte Frage.)
quelle
In ADT habe ich Folgendes getan:
quelle
Normalerweise sollte Eclipse in der Lage sein, die Standard-Include-Dateien automatisch aufzulösen. Dazu ruft er gcc auf und fragt nach seiner Konfiguration. Höchstwahrscheinlich findet Eclipse Ihren gcc nicht (oder zumindest nicht die Version, die Sie zum Kompilieren verwenden).
Anstatt alle Standard-Include-Pfade in den Projekteinstellungen anzugeben, möchten Sie wahrscheinlich sicherstellen, dass Eclipse gcc findet. Fügen Sie das Verzeichnis, in dem gcc gefunden wird, zur Umgebungsvariablen PATH hinzu, bevor Sie Eclipse starten.
Wenn Sie möchten, dass verschiedene Projekte unterschiedliche Compiler verwenden, möchten Sie möglicherweise die Erkennungsoptionen optimieren. Diese sind standardmäßig ausgeblendet. Aktivieren Sie sie daher zuerst über Fenster> Einstellungen> C / C ++> Eigenschaftenseiteneinstellungen> Seite "Erkennungsoptionen" anzeigen. Sie finden sie dann unter C / C ++ Build> Erkennungsoptionen in den Projekteigenschaften.
quelle
Ich verwende Eclipse-basierte CodeWarrior-IDE für eingebettete Projekte und habe dieses Problem gerade gelöst, indem ich die Quelladressen gelöscht und erneut zu Project Properities-> C / C ++ General-> Path and Sybols-> Include Directories hinzugefügt habe. Dies bedeutet, dass es viele Gründe gibt, die Nachricht "Ungelöste Aufnahme:" zu verwenden, und dass es auch viele Lösungen gibt.
quelle
Ein Fehler beim Konfigurieren von Pfaden und Symbolen ist, dass ich anfangs die Include-Pfade für eine andere Sprache konfiguriert habe. Ich arbeite mit CDT und Cygwin Gnu C ++. Sie müssen also Symbole und Pfade in der Sprache GNU C ++ konfigurieren.
quelle
Auch setzen
${COMMAND}
aufgcc
LinuxUnter:
Ersetzen:
mit:
Wenn Sie dies nicht tun, zeigt das Eclipse-Standard:
und Protokolle unter
${HOME}/eclipse-workspace/.metadata/.log
show:weil
${COMMAND} ${FLAGS}
leer sind, und so versucht Eclipse, die auszuführen-E
, was als nächstes kommt.Ich frage mich, ob wir das
COMMAND
und richtig definieren könnenFLAGS
-Variablen in den Einstellungen können, aber ich habe versucht, sie als Build-Variablen hinzuzufügen, und es hat nicht funktioniert.C ++ - Version der Frage: Wie löse ich "Ungelöste Aufnahme: <iostream>" in einer C ++ - Datei in Eclipse CDT?
Getestet auf Eclipse 2020-03 (4.15.0), Ubuntu 19.10 und diesem minimalen Makefile-Projekt mit vorhandenen Quellen .
quelle
Überprüfen Sie, ob es über die Befehlszeile kompiliert wurde? Für mich hilft unter Linux, apt libc-dev zu installieren.
quelle