Forum: Compiler & IDEs Arduino IDE unter Linux findet Bibliotheken nicht


von Georg (georgwa)


Lesenswert?

Guten Tag in die Runde,

ich komme bei einem Fehler mit der Arduino IDE nicht mehr weiter.
Es handelt sich um die IDE 1.8.19 auf Linux Mint 21.
Sketche, die keine Bibliotheken verwenden, kann man kompilieren und 
hochladen, alles ok. Auch solche, in denen Bibliotheken eingebunden 
werden, die von der IDE mitgeliefert werden, wie etwa SPI machen keine 
Probleme.
Anders etwa bei OneWire. Egal, ob ich sie mit der Bibliotheksverwaltung 
installiere, als zip herunterlade und über die IDE installiere, oder die 
zip-Datei selber entpacke und das Ergebnis in den Ordner 
"/home/ewald/Arduino/libraries" kopiere, das Ergebnis ist identisch: 
OneWire wird unter den "Beigetragenen Bibliotheken" aufgeführt, auch die 
Beispielsketche stehen zur Verfügung, beim Kompilieren eines Sketches, 
in den OneWire inkludiert wurde allerdings wird die Bibliothek nicht 
gefunden. Folgende Fehlermeldung wird angezeigt:
********************************************************
Arduino: 1.8.19 (Linux), Board: "Arduino Uno"

arduino-builder -dump-prefs -logger=machine -hardware 
/usr/share/arduino/hardware -tools /usr/share/arduino/hardware/tools/avr 
-libraries /home/ewald/Arduino/libraries -fqbn=arduino:avr:uno 
-ide-version=10819 -build-path /tmp/arduino_build_758971 -warnings=none 
-build-cache /tmp/arduino_cache_120350 
-prefs=build.warn_data_percentage=75 -verbose 
/home/ewald/Arduino/Test/Test.ino
arduino-builder -compile -logger=machine -hardware 
/usr/share/arduino/hardware -tools /usr/share/arduino/hardware/tools/avr 
-libraries /home/ewald/Arduino/libraries -fqbn=arduino:avr:uno 
-ide-version=10819 -build-path /tmp/arduino_build_758971 -warnings=none 
-build-cache /tmp/arduino_cache_120350 
-prefs=build.warn_data_percentage=75 -verbose 
/home/ewald/Arduino/Test/Test.ino
Using board 'uno' from platform in folder: 
/usr/share/arduino/hardware/arduino/avr
Using core 'arduino' from platform in folder: 
/usr/share/arduino/hardware/arduino/avr
Detecting libraries used...
"/usr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive 
-fno-exceptions -ffunction-sections -fdata-sections 
-fno-threadsafe-statics -Wno-error=narrowing  -flto -w -x c++ -E -CC 
-mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_UNO 
-DARDUINO_ARCH_AVR 
"-I/usr/share/arduino/hardware/arduino/avr/cores/arduino" 
"-I/usr/share/arduino/hardware/arduino/avr/variants/standard" 
"/tmp/arduino_build_758971/sketch/Test.ino.cpp" -o "/dev/null"
Generating function prototypes...
"/usr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive 
-fno-exceptions -ffunction-sections -fdata-sections 
-fno-threadsafe-statics -Wno-error=narrowing  -flto -w -x c++ -E -CC 
-mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_UNO 
-DARDUINO_ARCH_AVR 
"-I/usr/share/arduino/hardware/arduino/avr/cores/arduino" 
"-I/usr/share/arduino/hardware/arduino/avr/variants/standard" 
"/tmp/arduino_build_758971/sketch/Test.ino.cpp" -o 
"/tmp/arduino_build_758971/preproc/ctags_target_for_gcc_minus_e.cpp"
/home/ewald/Arduino/Test/Test.ino:1:21: schwerwiegender Fehler: 
OneWire.h: Datei oder Verzeichnis nicht gefunden
Kompilierung beendet.
exit status 1
Fehler beim Kompilieren für das Board Arduino Uno.
**********************************************************
Leider verstehe ich davon nur die letzten 5 Zeilen...
In den Ordner für die mitgelieferten Bibliotheken kann ich wegen 
fehlender Rechte nichts hineinkopieren, Neustarts der IDE und des 
Rechners bringen nichts, ebensowenig wie eine Neuinstallation der IDE. 
Auf meinem Windows Rechner hatte ich dieses Problem nicht. Aber der 
existiert nicht mehr.
Wenn jemand eine Lösung wüsste, wäre ich dafür sehr dankbar.

von Harald K. (kirnbichler)


Lesenswert?

Georg schrieb:
> beim Kompilieren eines Sketches,
> in den OneWire inkludiert wurde

Und wie hast Du das gemacht? Spitzklammern oder Anführungszeichen?

von Hans (ths23)


Lesenswert?

Georg schrieb:
> OneWire.h: Datei oder Verzeichnis nicht gefunden
Dem Compiler wird der Pfad nicht bekannt sein wo sich die Datei 
befindet. Du müßtest halt wahrscheinlich schreiben:
1
include "<kompletter Pfad/OneWire.h>"

Zweite Sache, heißt die Datei wirklich OneWire.h oder heißt sie eher 
onewire.h?
Bei Linux ist das entscheident. Diese Groß-/Kleinschreibung ist bei 
Filenamen für Headerdateien nicht unbedingt üblich, die werden oftmals 
komplett klein geschrieben. Also noch mal kontrollieren und den Aufruf 
so schreiben wie die Datei auch auf der Platte heißt.

Georg schrieb:
> In den Ordner für die mitgelieferten Bibliotheken kann ich wegen
> fehlender Rechte nichts hineinkopieren
Doch das geht schon mit
1
sudo cp <source> <destination> -p
Mit -p werden die Berechtigungen mit kopiert.

Georg schrieb:
> Auf meinem Windows Rechner hatte ich dieses Problem nicht.
Linux tickt halt etwas anders als Windows.

von Alexander (alecxs)


Lesenswert?

Hans schrieb:
> Du müßtest halt wahrscheinlich schreiben:

was Harald K. (kirnbichler) geschrieben hat ;)

von Joe (Gast)


Lesenswert?

Alexander schrieb:
> Hans schrieb:
>> Du müßtest halt wahrscheinlich schreiben:
>
> was Harald K. (kirnbichler) geschrieben hat ;)

Das hat er ja gerade nicht verstanden. Statt den TA zu verarschen hätte 
man ihm ja auch gleich helfen können. Was soll das?

Wenn du den Namen deiner Bibliothek in Doppelanführungszeichen setzt, 
schaut der Compiler in dem Verzeichnis nach wo der Sketch ist

Bsp.: #include "Adafruit_GFX.h".

Mit Spitzklammern wird in dem Standard-Arduino-Library Verzeichnis 
gesucht also unter Linux dann in /home/georgwa/Arduino/libraries/
Beispiel:#include <GxEPD2_BW.h>

Woher ich das weiss? Ratet mal.

von Harald K. (kirnbichler)


Lesenswert?

Joe schrieb:
> Wenn du den Namen deiner Bibliothek in Doppelanführungszeichen setzt,

Anführungszeichen. Nix "doppel". Verwirr' die Leute nicht mit falschen 
Begriffen.

" - Anführungszeichen
' - Hochkomma bzw. Apostroph

von Alexander (alecxs)


Lesenswert?

Kommt wohl von "double quotes" und 'single quotes' nicht zu verwechseln 
mit „Gänsefüßchen“ ;)

: Bearbeitet durch User
von Joe (Gast)


Angehängte Dateien:

Lesenswert?

Harald K. schrieb:
> Anführungszeichen. Nix "doppel". Verwirr' die Leute nicht mit falschen
> Begriffen.
>
> " - Anführungszeichen
> ' - Hochkomma bzw. Apostroph

Nein, eben nicht. Du verwirrst die Leute. Du redest von Windoofs. Er hat 
aber LINUX gesagt.

Und mein Sketch kompiliert einwandfrei, siehe Anlage. Möglicherweise 
macht die Spracheinstellung noch einen Unterschied. Deswegen läuft bei 
mir alles auf EN gestellt.

von Martin H. (horo)


Lesenswert?

Joe schrieb:
> Harald K. schrieb:
>> Anführungszeichen. Nix "doppel". Verwirr' die Leute nicht mit falschen
>> Begriffen.
>>
>> " - Anführungszeichen
>> ' - Hochkomma bzw. Apostroph
>
> Nein, eben nicht. Du verwirrst die Leute. Du redest von Windoofs. Er hat
> aber LINUX gesagt.

Jetzt bin ich verwirrt (oder Du?) - Was hat der Name der Zeichen mit dem 
Betriebssystem zu tun?

von Harald K. (kirnbichler)


Lesenswert?

Joe schrieb:
> Du redest von Windoofs.

Ich bin aus dem Kindergartenalter raus. Typographische Bezeichnungen 
sind betriebssystemagnostisch, und welche Zeichen für 
#include-Anweisungen in C- oder C++-Code verwendet werden, ebenso.

von Thomas W. (dbstw)


Lesenswert?

Joe schrieb:

> Wenn du den Namen deiner Bibliothek in Doppelanführungszeichen setzt,
> schaut der Compiler in dem Verzeichnis nach wo der Sketch ist
>
> Bsp.: #include "Adafruit_GFX.h".

Das ist in erster Naeherung nicht ganz richtig. Berichte mal, was 
passiert wenn Du eine Datei "conf.h" inkludierst die aber nicht "in dem 
Verzeichnis nach wo der Sketch ist" existiert! -> Richtig, den gesamten 
Include-Pfad durchsuchen. Bei einer conf.h hast Du eine gute Chance 
irgendeine Datei zu bekommen.

Aus https://gcc.gnu.org/onlinedocs/cpp/Search-Path.html:
1
2.3 Search Path
2
3
By default, the preprocessor looks for header files included by the quote form of the directive #include "file" first relative to the directory of the current file, and then in a preconfigured list of standard system directories. For example, if /usr/include/sys/stat.h contains #include "types.h", GCC looks for types.h first in /usr/include/sys, then in its usual search path.

Das passiert mir nicht noch mal. Vor allen Dingen die "preconfigured 
list of directories" kann Dich richtig verwirren.

: Bearbeitet durch User
von Georg (georgwa)


Lesenswert?

Guten Abend, und danke für die Diskussion, auch wenn ich ihr nicht 
überall hin folgen konnte.

Den Unterschied, den Spitzklammern und Anführungszeichen bei der 
Inkludierung der Bibliotheken machen, kannte ich und habe beides 
probiert. Auch so, dass ich Anführungszeichen verwendet habe, und die 
Bibliothek im Sketchverzeichnis hatte. Gleiche Ergebnis. Am Pfad hatte 
ich nichts geändert, weil es in der Vergangenheit nie nötig war, um zu 
funktionieren, und er einfach auch stimmte. Dass die Sache 
Case-Sensitive ist, habe ich auch berücksichtigt.

Ich hatte gehofft, dass ich nicht der einzige Linuxnutzer bin, der diese 
Schwierigkeiten hat, und vielleicht jemand schreiben würde:" Klar, war 
bei mir auch, und da muss man ......". Denn mein System weist keine 
Besonderheiten auf.

Ist aber egal. Ich habe jetzt auf dem gleichen Rechner die neue 
Arduino-IDE 2.irgendwas installiert, und es funktionierte sofort. Also 
ein wenig much ado about nothing, tut mir leid. Aber interessieren würde 
mich immer noch, woran es hing.

Dank an alle, die sich geäußert haben und einen schönen Abend noch.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.