it-swarm.com.de

Fehler "Nicht aufgelöste Einbeziehung" mit Eclipse CDT für C-Standardbibliothekskopfzeilen

Ich habe CDT für Eclipse eingerichtet und ein einfaches Hello World C-Programm geschrieben:

#include <stdio.h>

int main(void){
    puts("Hello, world.");
    return 0;
}

Das Programm wird ordnungsgemäß erstellt und ausgeführt, aber Eclipse zeigt dieses gelbe Fragezeichen neben der Einschlussanweisung mit der Aufschrift "Unresolved inclusion: <stdio.h>" an, wenn ich die Maus darüber drücke.

Es wirkt sich nicht auf die Ausführung des Programms aus, aber ich finde es ziemlich nervig.

Hat jemand eine Idee, wie man es entfernen kann?

88
Spirit Zhang

Der von Eclipse verwendete Compiler ist in der Lage, die Symbole gut aufzulösen, sodass der Code gut kompiliert werden kann.

Aber der Code-Vervollständigungs-/Präprozessor, den Eclipse verwendet, weiß nicht, wo stdio.h existiert.

Sie müssen den Dateisystempfad angeben, in dem sich stdio.h befindet.

Siehe: http://help.Eclipse.org/galileo/index.jsp?topic=/org.Eclipse.cdt.doc.user/tasks/cdt_t_proj_paths.htm

48
ardnew

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). Öffnen Sie in Eclipse die Eigenschaften Ihres Projekts, erweitern Sie "C/C++ - Allgemein" und wählen Sie "Pfade und Symbole".

Stellen Sie sicher, dass Sie das include-Verzeichnis für jede verwendete Sprache hinzugefügt haben. (In meinem Fall musste ich es einfach zu GNU C++ hinzufügen.)

enter image description here

45
aaaidan

ich habe gerade die Wissensbasis erweitert und das mit win7 mit cygwin getan.

das scheint für mich zu funktionieren.

pfade für c einschließen:

D:\dev\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include
D:\dev\cygwin\usr\include

pfade für C++ einschließen:

D:\dev\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include
D:\dev\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include\c++
D:\dev\cygwin\usr\include

das bringt mir eine saubere Zusammenstellung von Hallo Welt.

17
Ray Tayek

Gehen Sie zu Projekt> Eigenschaften> C/C++ - Allgemein> Preprozessor-Includes> Provider Und wählen Sie "CDT GCC Built-in Compiler-Einstellungen" und "CDT CROSS GCC Built-in Compiler-Einstellungen". 

15
Mike B
  • Wählen Sie Datei >> Neues Projekt
  • Wählen Sie im Projekt-Assistenten C/C++ >> C++ - Projekt
  • Wählen Sie im Abschnitt "Projekttyp" " Makefile-Projekt >> Hallo Welt C++ - Projekt " aus.
  • Wählen Sie im Abschnitt "Toolchains" " Linux GCC " aus.

Es kann das Problem lösen. (Entschuldigung für schlechtes Englisch)

10

Ich arbeite mit multiple 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.
Aufgrund eines - Fehlers in Eclipse wird die Option leider nicht lokal gespeichert. Sie müssen die Konfiguration workspace verwenden, wenn Sie die Konfiguration beim Öffnen von Eclipse speichern möchten nochmal.

Window -> Einstellungen -> C/C++ -> Indexer -> Aktive Build-Konfiguration verwenden

Dadurch verwendet Eclipse den richtigen Compiler, der mit der aktiven Cross-GCC-Konfiguration des Projekts festgelegt ist.

4
Yochai Timmer

Ich benutze Eclipse mit Cygwin und das hat für mich funktioniert:

Gehen Sie zu Projekt> Eigenschaften> C/C++ - Allgemein> Preprozessor-Include ...> Provider Und wählen Sie "CDT GCC Built-in Compiler Settings Cygwin [Shared]". 

4
superm0

Ich verwende Eclipse-basierten CodeWarrior IDE für eingebettete Projekte, und ich habe dieses Problem soeben gelöst, dass die Quelladressen in Project Properities-> C/C++ General-> Path und Sybols-> Include-Verzeichnisse gelöscht und erneut hinzugefügt wurden. Dies bedeutet, dass es viele Gründe gibt, die Meldung "Ungelöste Inklusion:" aufzunehmen, und es gibt auch viele Lösungen.

1
Enes Akyay

In ADT habe ich Folgendes getan:

  1. klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie Eigenschaften
  2. erweitern Sie C/C++ General, und wählen Sie Präprozessor-Include-Pfade, -Makros usw. aus.
  3. wählen Sie CDT-Benutzereinstellungen
  4. wählen Sie im rechten Menü die Option Hinzufügen
  5. Ändern Sie im Add Include Directory den Projektpfad in Dateisystempfad
  6. Navigieren Sie zu dem Verzeichnis, das Ihre Include-Dateien enthält
  7. rühren und wiederholen, wenn nötig
1
user330844

Normalerweise sollte Eclipse die Standard-Include-Dateien automatisch auflösen können. Dazu ruft man gcc auf und fragt nach seiner Konfiguration. Eclipse findet wahrscheinlich nicht Ihren gcc (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, der Umgebungsvariable PATH hinzu, bevor Sie Eclipse starten.

Wenn Sie möchten, dass verschiedene Projekte andere Compiler verwenden, können Sie die Erkennungsoptionen optimieren. Diese sind standardmäßig ausgeblendet. Aktivieren Sie sie daher zunächst über Fenster> Voreinstellungen> C/C++> Eigenschaftsseiteneinstellungen> Seite "Ermittlungsoptionen anzeigen". Sie finden sie unter C/C++ Build> Discovery-Optionen in den Projekteigenschaften. 

1
Seppo Enarvi

Ein Fehler, den ich beim Konfigurieren von Pfaden und Symbolen hatte, ist, dass ich zunächst 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 unter der Sprache GNU C++ konfigurieren . enter image description here

0
rodolk

Als Antwort auf die (aktuellen) Antworten sollte angegeben werden, wo sich die Build-Ordner befinden. Sie können über ein Dialogfeld hinzugefügt werden, indem Sie mit der rechten Maustaste auf das Projekt klicken und Eigenschaften-> C/C++ - Allgemein> Pfade und Symbole auswählen.

Die verbleibende Frage ist, welche Pfade hinzugefügt werden müssen.

Wenn Sie crosskompilieren oder etwas Besonderes tun, wissen Sie wahrscheinlich, welche Pfade Sie in welcher Reihenfolge benötigen (oder sollten die Dokumentation Ihres Compilers und/oder andere Abhängigkeiten betrachten).

Für diejenigen, die nach den Grundlagen suchen: Wenn Sie gcc für den Befehlszeilenzugriff richtig eingerichtet haben und wissen möchten, welche Standardpfadpfade verwendet werden, fragen Sie einfach nach. 

Abhängig von der Sprache, die Sie interessieren, verwenden Sie:

gcc -x c -v -E /dev/null
gcc -x c++ -v -E /dev/null

... Hier werden die Standard-Compilereinstellungen aufgelistet, die beim Aufruf von gcc verwendet werden (und dieser Befehl funktioniert auch, wenn "gcc" wirklich ein Alias ​​für clang ist, wie unter OSX). 

Beachten Sie unter Windows, dass /dev/null nur eine einfache Abkürzung für eine leere Eingabedatei ist (ohne dass eine erstellt werden muss).

Am unteren Rand befindet sich die Liste der Include-Verzeichnisse:

#include "..." search starts here:
#include <...> search starts here:
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.2/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks (framework directory)
End of search list.

Wenn Sie die hier aufgeführten Verzeichnisse in der angegebenen Reihenfolge in den Dialog Pfade und Symbole von Eclipse eingeben, sollte Eclipse CDT in der Lage sein, die Standardkopfzeilen und möglicherweise einige zusätzliche Kopfzeilen für Ihr Betriebssystem zu finden.

(Dank an devnulls Antwort an eine verwandte Frage.)

0