3-я библиотека: фатальная ошибка: Something.h: Файл не существует

Я создал этот вопрос, потому что нахожу много вопросов с похожими проблемами, поэтому я хотел бы предоставить справочный/более общий вопрос для такого типа проблем.

Для своих проектов я устанавливал сторонние библиотеки, клонируя их из Git-репозитория библиотеки в папку, указанную в файле preferences.txt в соответствии со значением sketchbook.path, в папку с именем libraries. Другими словами, если значение sketchbook.path равно /home/myuser/sketchbook, я клонирую репозитории в папку /home/myuser/sketchbook/libraries.

Затем в папке /home/myuser/sketchbook/myexample я сохраняю свой код myexample.ino, которому нужна библиотека с заголовочными файлами Something.h.

При нажатии кнопки «Проверить» в Arduino IDE возникает ошибка:

/usr/share/arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -Wall -fno-exceptions 
    -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -MMD 
    -DUSB_VID=null -DUSB_PID=null -DARDUINO=105 -D__PROG_TYPES_COMPAT__         
    -I/usr/share/arduino/hardware/arduino/cores/arduino 
    -I/usr/share/arduino/hardware/arduino/variants/standard 
    -I/usr/share/arduino/libraries/SPI 
    /tmp/build6596169359663087897.tmp/LoRaSerialGateway.cpp -o 
    /tmp/build6596169359663087897.tmp/LoRaSerialGateway.cpp.o 
LoRaSerialGateway.ino:15:18: fatal error: Something.h: 
compilation terminated.

Полагаю, я не могу заставить avr-gcc скомпилироваться с использованием сторонней библиотеки. Знаете ли вы, как передать avr-gcc правильные пути к соответствующим библиотекам?

, 👍1

Обсуждение

Arduino IDE справится с этим, если библиотеки действительно установлены через IDE., @Ignacio Vazquez-Abrams


2 ответа


Лучший ответ:

1

Предполагая, что у вас уже есть работающая библиотечная система, то есть в каталоге .../libraries есть несколько библиотек, которые корректно компилируются или, по крайней мере, компилятор успешно их находит. И вы хотите добавить ещё одну библиотеку, например, «CrashAndBurn.h» и «CrashAndBurn.cpp», вам нужно поместить эти два файла в папку с именем .../libraries/CrashAndBurn/. Затем в скетче добавьте директиву include #include <CrashAndBurn.h>.

Альтернативный вариант — поместить файлы .h и .cpp в другое место, например, в папку внутри папки проекта, и изменить директиву include так, чтобы она указывала на них, например, #include "libs/CrashAndBurn.h", где папка libs находится внутри папки Sketch. Или можно поместить их в любую папку и указать абсолютный путь к ним: /home/some/place/else/CrashAndBurn.h

,

1

Иногда вам нужно немного изменить правила работы с файлами библиотеки в случае с этой библиотекой, чтобы сделать ее доступной. Я переместил код из папки ./src за пределы корневой папки проекта.

Ещё одна проблема заключается в том, что вы можете использовать устаревшую версию IDE. Особенно это может произойти в GNU/Linux, если вы устанавливаете IDE для Arduino из репозиториев дистрибутива.

,

просто переименуйте папку из zip в LoRa в библиотеках. не нужно перемещать файлы, @Juraj

Я использовал метод git., @Dimitrios Desyllas

Я создаю ссылку на файловую систему из папки git в папку libraries с правильным именем библиотеки, @Juraj