Spørsmål:
Problem med å importere et bibliotek i .h-filen
Thomas S.
2015-04-04 19:43:57 UTC
view on stackexchange narkive permalink

Jeg har følgende kode:

MyApp.ino :

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

DfRobotLcdShield.h :

  #include <LiquidCrystal.h>  

Når jeg prøver å kompilere, får jeg feilen:

  I filen inkludert fra MyApp.ino: 1: 0: c: \ temp \ build5856181074637812172.tmp \ DfRobotLcdShield.h : 4: 27: dødelig feil: LiquidCrystal.h: Ingen slik fil eller katalog # inkluderer <LiquidCrystal.h> ^ kompilering avsluttet. Feilkompilering.  

Når jeg legger til

  #include <LiquidCrystal.h>  

direkte til .ino-filen, den fungerer. Jeg bruker den nyeste Arduino-IDE 1.6.3.

Det høres ut som om du vokser ut av begrensningene til Arduino IDE. Jeg tilbyr ikke dette som et svar fordi det ikke er en rask løsning å endre IDE, men vurder å oppgradere til mer dyktige verktøy i en ikke altfor fjern fremtid.
To svar:
fuenfundachtzig
2015-04-05 14:23:39 UTC
view on stackexchange narkive permalink

Dette ser ut til å være et generelt problem med Arduino IDE: Den gjenkjenner bare biblioteker som er inkludert i (primær) .ino -filen.

Hvis du ser på påkallelse av kompilatoren, blir stien til et gitt bibliotek bare lagt til hvis bibliotekets headerfil er inkludert i .ino -filen.

Jeg testet dette med EEPROM-biblioteket. Hvis dette biblioteket er inkludert i .ino -filen, kalles kompilatoren med

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

hvor viktig delen er -I/usr/share/arduino/libraries/EEPROM.

Hvis jeg nå fjerner #include <EEPROM.h> (men fortsatt har den i en annen topptekstfil som igjen er inkludert i .ino som i ditt tilfelle), endres kompilatoranropet til

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

hvor nå inkluderer stien til biblioteket mangler.

TL; DR

Hvis du trenger å bruke et bibliotek, er det bare (også) å legge til en inkludering i .ino -filen. Det koster deg ingenting og vil løse problemet ditt;)


#include <file> vs. #include "file"

Fra gcc-dokumentasjonen:

  • #include <file> brukes til systemhodefiler. Den søker etter en fil med navnet fil i en standardliste med systemkataloger. [...]
  • #include "file" brukes til headerfiler i ditt eget program. Den søker etter en fil med navnet filen først i katalogen som inneholder den nåværende filen, deretter i sitatkatalogene og deretter de samme katalogene som brukes til <file>. [...]
Paul
2015-04-05 02:06:05 UTC
view on stackexchange narkive permalink

Prøv #include "LiquidCrystal.h"

Eller hvor ligger biblioteket? Pass på at inkluderingen spesifiserer plasseringen.

Du kan ha for å legge til bibliotekets beliggenhet i miljøvariablene.

`LiquidCrystal.h` er et systembibliotek og må derfor, i følge min begrensede C-kunnskap, inkluderes i <>.
Har du lagt til det gjennom "sketch -> include library -> LiquidCrystal.h"?
Jeg har prøvd det også uten forskjell.
Kan du bekrefte at denne filen er i bibliotekmappen din? Du kan prøve å legge den i prosjektmappen din, slik at koblingen ikke trenger å se så langt
Ja, den er der - les den andre siste setningen min i spørsmålet.


Denne spørsmålet ble automatisk oversatt fra engelsk.Det opprinnelige innholdet er tilgjengelig på stackexchange, som vi takker for cc by-sa 3.0-lisensen den distribueres under.
Loading...