Domanda:
Problema durante l'importazione di una libreria nel file .h
Thomas S.
2015-04-04 19:43:57 UTC
view on stackexchange narkive permalink

Ho il seguente codice:

MiaApp.ino :

  #include "DfRobotLcdShield.h" void setup () {} void loop () {}  

DfRobotLcdShield.h :

  #include <LiquidCrystal.h>  

Quando provo a compilare, ricevo l'errore:

  Nel file incluso da MyApp.ino: 1: 0: c: \ temp \ build5856181074637812172.tmp \ DfRobotLcdShield.h : 4: 27: errore fatale: LiquidCrystal.h: Nessun file o directory di questo tipo #include <LiquidCrystal.h> ^ compilazione terminata.Errore di compilazione.  

Quando aggiungo

  #include <LiquidCrystal.h>  

direttamente nel file .ino, funziona. Sto usando l'ultima versione di Arduino-IDE 1.6.3.

Sembra che tu stia superando i limiti dell'IDE di Arduino. Non lo offro come risposta perché cambiare IDE non è una soluzione rapida, ma considera l'aggiornamento a strumenti più capaci in un futuro non troppo lontano.
Due risposte:
fuenfundachtzig
2015-04-05 14:23:39 UTC
view on stackexchange narkive permalink

Questo sembra essere un problema generale dell'IDE di Arduino: riconosce solo le librerie incluse nel file (primario) .ino .

Se guardi il invocazione del compilatore, il percorso di una determinata libreria viene aggiunto solo se il file di intestazione di questa libreria è incluso nel file .ino .

L'ho testato con la libreria EEPROM. Se questa libreria è inclusa nel file .ino , il compilatore viene chiamato con

  avr-g ++ -c -g -Os -Wall -fno-exceptions -ffunction -sezioni -fdata-sezioni -mmcu = atmega328p -DF_CPU = 16000000L -DARDUINO = 100 -I / usr / share / arduino / hardware / arduino / cores / arduino -I / usr / share / arduino / hardware / arduino / variant / eightanaloginputs -I / usr / share / arduino / libraries / EEPROM /tmp/build2678545434708654378.tmp/test.cpp -o / tmp / build2678545434708654378.tmp / test.cpp.o 

dove l'importante parte è -I/usr/share/arduino/libraries/EEPROM.

Se ora rimuovo #include <EEPROM.h> (ma ho ancora in un altro file di intestazione che a sua volta è incluso in .ino come nel tuo caso), la chiamata del compilatore cambia in

  avr-g ++ -c -g - Os -Wall -fno-exceptions -ffunction-sezioni -fdata-sezioni -mmcu = atmega328p -DF_CPU = 16000000L -DARDUINO = 100 -I / usr / share / arduino / hardware / arduino / cores / arduino -I / usr / share / arduino / hardware / arduino / variant / eightanaloginputs /tmp/build2678545434708654378.tmp/test.cpp -o / tmp / build2678545434708654378.tmp / test.cpp.o  

dove ora include il percorso della libreria è mancante.

TL; DR

Se è necessario utilizzare una libreria, è sufficiente (anche) aggiungere un'inclusione al file .ino . Non ti costa nulla e risolverà il tuo problema;)


#include <file> contro #include "file"

Dalla documentazione di gcc:

  • #include <file> viene utilizzato per i file di intestazione di sistema. Cerca un file denominato file in un elenco standard di directory di sistema. [...]
  • #include "file" viene utilizzato per i file di intestazione del tuo programma. Cerca un file denominato file prima nella directory contenente il file corrente, quindi nelle directory delle virgolette e quindi nelle stesse directory utilizzate per <file>. [...]
Paul
2015-04-05 02:06:05 UTC
view on stackexchange narkive permalink

Prova #include "LiquidCrystal.h"

O dove si trova la libreria? Assicurati che l'inclusione specifichi la posizione.

Potresti aver per aggiungere la posizione della libreria alle variabili di ambiente.

`LiquidCrystal.h` è una libreria di sistema e quindi, secondo la mia limitata conoscenza del C, deve essere inclusa con <>.
L'hai aggiunto tramite "sketch -> include library -> LiquidCrystal.h"?
Ho provato anche quello, senza alcuna differenza.
Puoi verificare che questo file sia nella cartella delle tue librerie? Potresti provare a metterlo nella cartella del tuo progetto, in modo che il linker non debba guardare così lontano
Sì, è lì - per favore leggi la mia seconda ultima frase nella domanda.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...