Errore “Inclusione non risolta” con Eclipse CDT per le intestazioni di libreria standard C

Ho creato CDT per Eclipse e ho scritto un semplice programma Hello World C:

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

Il programma si costruisce e funziona correttamente, ma eclipse continua a mostrare questo punto interrogativo giallo accanto all’istruzione di inclusione che dice "Unresolved inclusion: " quando metto sopra il mouse.

Non influisce sul funzionamento del programma, ma lo trovo piuttosto fastidioso.

Qualcuno ha qualche idea su come rimuoverlo?

Il compilatore che usa Eclipse è in grado di risolvere i simboli bene, quindi il codice verrà compilato correttamente.

Ma il completamento del codice / preprocessore usato da Eclipse non sa dove stdio.h esiste.

È necessario specificare il percorso del filesystem in cui si trova stdio.h.

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

Ho trovato queste risposte (compresa quella accettata) piuttosto criptico.

Per me, ho dovuto aggiungere il percorso in cui si trova stdio.h (come ha detto @ardnew). In Eclipse, apri le Proprietà del tuo progetto, espandi “C / C ++ General” e seleziona “Path and Symbols”.

Assicurati di aver aggiunto la cartella include per ogni lingua che stai utilizzando. (Nel mio caso, avevo solo bisogno di aggiungerlo a GNU C ++.)

inserisci la descrizione dell'immagine qui

aggiungendo semplicemente alla base di conoscenza, l’ho appena fatto su win7 con cygwin.

questo è quello che sembra funzionare per me.

includi percorsi per c:

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

includi percorsi per c ++:

 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 

questo mi fa compilare in modo pulito il mondo Ciao.

Vai su Progetto> Proprietà> C / C ++ Generale> Preprocessore Include> Provider e seleziona “Impostazioni del compilatore incorporato CDCC GCC” e “Impostazioni del compilatore incorporato CDCC CROSS GCC”.

  • Seleziona File >> Nuovo progetto
  • Nel Project Wizard, selezionare C / C ++ >> Progetto C ++
  • Nella sezione “Tipo di progetto”, seleziona ” Progetto Makefile >> Hello world C ++ Project
  • Nella sezione “Toolchains”, seleziona ” Linux GCC

Può risolvere il problema. (Mi scusi per il cattivo inglese)

Sto usando Eclipse con Cygwin e questo ha funzionato per me:

Vai su Progetto> Proprietà> C / C ++ Generale> Preprocessore Include …> Provider e seleziona “Impostazioni del compilatore incorporato CDC GCC Cygwin [Condivisa]”.

Sto lavorando con più configurazioni cross-compiler , in cui ho bisogno di utilizzare diverse posizioni per i file di intestazione STD (e altre variabili d’ambiente).

La soluzione era impostare l’indicizzatore in modo che utilizzasse la configurazione triggers.
Sfortunatamente a causa di qualche bug in eclipse , l’opzione non è memorizzata localmente, quindi devi usare la configurazione dello spazio di lavoro se vuoi salvare la configurazione quando apri di nuovo eclipse.

Finestra -> Preferenze -> C / C ++ -> Indicizzatore -> Usa configurazione build triggers

Questo farà sì che eclipse utilizzi il compilatore giusto impostato con la configurazione Cross GCC triggers del progetto.

In ADT ho fatto quanto segue:

  1. tasto destro del mouse sul progetto e selezionare Proprietà
  2. espandere C / C ++ Generale e selezionare Preprocessore Include percorsi, macro ecc.
  3. selezionare le voci delle impostazioni utente CDT
  4. selezionare Aggiungi … dal menu di destra
  5. Nella directory Aggiungi guida modifica percorso del progetto al percorso del file system
  6. Passare alla directory che contiene i file di inclusione
  7. mescolare e ripetere se necessario

Normalmente, Eclipse dovrebbe essere in grado di risolvere automaticamente i file di inclusione standard. Lo fa chiamando gcc e chiedendo la sua configurazione. Molto probabilmente Eclipse non sta trovando il tuo gcc (o almeno non la versione che usi per la compilazione).

Invece di specificare tutti i percorsi di inclusione standard nelle impostazioni del progetto, probabilmente si desidera assicurarsi che Eclipse trovi gcc. Aggiungi la directory in cui gcc viene trovato nella variabile di ambiente PATH prima di avviare Eclipse.

Se vuoi che progetti diversi usino compilatori diversi, allora potresti voler modificare le opzioni di scoperta. Questi sono nascosti di default, quindi per prima cosa abilitali da Finestra> Preferenze> C / C ++> Impostazioni Pagine delle proprietà> Visualizza “Opzioni di individuazione”. Quindi puoi trovarli in C / C ++ Build> Discovery Options nelle proprietà del progetto.

Uso l’IDE CodeWarrior basato su eclipse per i progetti incorporati e ho appena risolto questo problema eliminando e aggiungendo di nuovo gli indirizzi sorgente a Proprietà del progetto-> C / C ++ Generale-> Path and Sybols-> Include Directories. Ciò significa che ci sono molte ragioni per prendere il messaggio “Inclusione irrisolta:” e anche molte soluzioni.

Un errore che ho dovuto configurare Path and Symbols è che inizialmente ho configato i percorsi di inclusione per una lingua diversa. Sto lavorando con CDT e Cygwin gnu C ++. Quindi devi configurare simboli e percorsi sotto il linguaggio GNU C ++. inserisci la descrizione dell'immagine qui

Poiché le risposte (attuali) più importanti, è necessario specificare dove si trovano le cartelle di compilazione, che possono essere aggiunte tramite una finestra di dialogo raggiungibile facendo clic con il pulsante destro del mouse sul progetto e selezionando Proprietà-> C / C ++ Generale-> Percorsi e simboli.

La domanda rimanente è quali percorsi devono essere aggiunti.

Se esegui la compilazione incrociata o fai qualcosa di stravagante, probabilmente sai quali percorsi ti servono e in quale ordine (o dovresti guardare la documentazione per il tuo compilatore e / o altre dipendenze).

Per coloro che cercano le basi: se hai gcc impostato correttamente per l’accesso alla riga di comando e hai bisogno di sapere quali sono i percorsi di inclusione predefiniti che usa, basta chiedere.

A seconda della lingua che ti interessa, usa:

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

… questo elencherà le impostazioni del compilatore di default che vengono usate quando si richiama gcc (e questo comando funziona anche se “gcc” è davvero un alias per clang, come su OSX).

Su Windows, si noti che /dev/null è solo una semplice scorciatoia per un file di input vuoto (senza doverne creare uno).

Verso il basso ci sarà l’elenco delle directory di inclusione:

 #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. 

Se si inseriscono le directory elencate qui, nell’ordine elencato, nella finestra di dialogo dei percorsi e dei simboli di Eclipse, Eclipse CDT dovrebbe essere in grado di trovare le intestazioni standard e forse alcune intestazioni aggiuntive specifiche per il proprio sistema operativo.

(Grazie alla risposta di devnull a una domanda correlata).