Объявление библиотек. Как правильно подключать библиотеки

forfrends
Offline
Зарегистрирован: 24.02.2015

Всем привет! У меня есть два вопроса по подключению библиотек.

1) В чем разница между "" и <> в подключении библиотеки? Пример:

#include "SPI.h"
#include <SPI.h>

Я знаю что это разный способ подключения библиотек (библиотеки берутся из разных мест). Но я не смог найти по этому поводу информации. Можете объяснить что к чему, или дайте ссылку, где об этом можно почитать.

2) Как указать какую именно библиотеку компилятор должен использовать, если их установлено несколько? Вот пример из лога компиляции:

Несколько библиотек найдено для "SdFat.h"
 Используется: C:\Users\Игорь\Documents\Arduino\libraries\SdFat-master
Не используется: C:\Users\Игорь\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.6.3\libraries\ESP8266SdFat
Не используется: C:\Users\Игорь\Documents\Arduino\libraries\SdFat_-_Adafruit_Fork
Не используется: C:\Users\Игорь\Documents\Arduino\libraries\arduino_253084

Как видно, на компьютере установлено несколько одинаковых библиотек, Как мне указать какую именно нужно использовать?

И еще вопрос, вытекающий из предыдущего:
Библиотека SdFat.h автоматически подтягивается из библиотеки SD.h , если я могу явно указать библиотеку SD.h, то какую библиотеку SdFat.h использовать выбирает уже компилятор. И часто выбирает не ту что нужно. Как мне указать компилятору откуда брать библиотеки?

Надеюсь на вашу помощь!

negavoid
Offline
Зарегистрирован: 09.07.2016

<> ищет в папках стандартных библиотек

"" ищет сперва в папке рядом с файлом, потом в стандартных папках

rkit
Offline
Зарегистрирован: 23.11.2016

.h файл и библиотека это разные вещи.

Указать что-то компилятору в среде arduino нельзя, она очень ограничена по функционалу. Если есть конфликт, то единственный способ - удалить конфликтующие элементы.

bwn
Offline
Зарегистрирован: 25.08.2014

Да и зачем держать двадцать однотипных библиотек. Выберите одну рабочую и юзайте ее, чем ждать подлянки от непроверенной. ИМХО.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

forfrends пишет:

Всем привет! У меня есть два вопроса по подключению библиотек.

1) В чем разница между "" и <> в подключении библиотеки? Пример:

#include "SPI.h"
#include <SPI.h>

Я знаю что это разный способ подключения библиотек (библиотеки берутся из разных мест). Но я не смог найти по этому поводу информации. Можете объяснить что к чему, или дайте ссылку, где об этом можно почитать.

Дак ты не ищи на blondie.ru ты ищи там, где это есть 

например, первая жэ гугал ссылка:  http://www.c-cpp.ru/books/include

 

forfrends
Offline
Зарегистрирован: 24.02.2015

Спасибо за ответы. Для меня остался только один вопрос не решенным: возможно ли прямое указание пути на библиотеку?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

forfrends пишет:

1) В чем разница между "" и <> в подключении библиотеки? Пример:

#include "SPI.h"
#include <SPI.h>

Я знаю что это разный способ подключения библиотек (библиотеки берутся из разных мест). Но я не смог найти по этому поводу информации.

Можете объяснить что к чему, или дайте ссылку, где об этом можно почитать.

Помните анекдот про водителя - нового русского и пешехода Козлова?

Так вот, «для Вас, Козлов», мы уже дали ссылку на книгу Кернигана и Ритчи "Язык программирования Си" в самой заглавной теме раздела "Песочница". И там же написали, что без знания (знания, а не просто скачивания) материала этой книги, в программировании просто нечего делать.

Ответ на Ваш вопрос содержится в книге по ссылке, что Вам давно дали. Раздел 4.11.1 на стр. 89. Как Вы умудрились его не найти (если читали книгу) я не представляю. А если не читали, то идите и читайте - Вам дали ссылку на книгу, а пересказывать её здесь по каждому Вашему чиху, ... идите и читайте.

lilik
Offline
Зарегистрирован: 19.10.2017

ЕвгенийП пишет:

Так вот, «для Вас, Козлов», мы уже дали ссылку на книгу ...

Всё равно неясности.

#include <Adafruit_NeoMatrix.h>

Вот с таким объявлением скетч проходит без ошибок и с таким объявлением тоже.

#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>

Однако стоит убрать из "ИДЕ" вторую библиотеку и ошибка платы для первого варианта...

Ясно, что первая библиотека зависима от второй, не ясно как пользователь это заподозрить должен. Почему вторую просто не включить в текст первой для её самодостаточности? Наткнулся случайно, в примерах из интернетов встречаются оба варианта, ну и во внутрь библиотеки потом глянул.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

lilik пишет:

ЕвгенийП пишет:

Так вот, «для Вас, Козлов», мы уже дали ссылку на книгу ...

Всё равно неясности.

#include <Adafruit_NeoMatrix.h>

Вот с таким объявлением скетч проходит без ошибок и с таким объявлением тоже.

#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>

Однако стоит убрать из "ИДЕ" вторую библиотеку и ошибка платы для первого варианта...

Ясно, что первая библиотека зависима от второй, не ясно как пользователь это заподозрить должен. Почему вторую просто не включить в текст первой для её самодостаточности? Наткнулся случайно, в примерах из интернетов встречаются оба варианта, ну и во внутрь библиотеки потом глянул.


Обычно в редми к библиотеке ее зависимости указываются

b707
Offline
Зарегистрирован: 26.05.2017

lilik пишет:

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

да очень просто - начнет компилироать без второй библиотеки и компилятор ему тут же "подскажет", что ее не хватает

lilik пишет:

Почему вторую просто не включить в текст первой для её самодостаточности?

вы сами-то поняли, что предложили?

Чтобы было понятнее - вот вам абсолютно "симметричное" предложение. Почему бы вам вместо включения этих двух строчек в скетч не включить в свою программу весь текст обоих библиотек? "Для самодостаточности". ?

Что, неохота? а почему автор второй библиотеки должен копировать текст первой в свой код, к чему это бред?

lilik
Offline
Зарегистрирован: 19.10.2017

Так можно ещё зависимую сверху написать и ещё, и ещё. Библиотекарство как бы в труху превращается. Надо бы тогда родословную по типу аргументов к функции прописывать - Иван родил Петра, Пётр - Александра, Александр - Светку (тут всё и началось :)

А компилятор не сильно подсказал (может конечно я чего не настроил :), кроме - ошибка для платы "Ардуино - Генуино"

NikShel
Offline
Зарегистрирован: 21.01.2018

Подписаться

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

lilik пишет:

Так можно ещё зависимую сверху написать и ещё, и ещё. Библиотекарство как бы в труху превращается. Надо бы тогда родословную по типу аргументов к функции прописывать - Иван родил Петра, Пётр - Александра, Александр - Светку (тут всё и началось :)

А компилятор не сильно подсказал (может конечно я чего не настроил :), кроме - ошибка для платы "Ардуино - Генуино"


При полном выводе сообщений он бы сказал - нет файла такого-то

b707
Offline
Зарегистрирован: 26.05.2017

lilik пишет:

может конечно я чего не настроил :)

Конечно не настроил

Файл -> Настройки -> Показать подробный вывод при _Компиляции_ _Загрузке_

Будет подробно (ну оооочень подробно) расписывать каждую ошибку

b707
Offline
Зарегистрирован: 26.05.2017

lilik пишет:

Так можно ещё зависимую сверху написать и ещё, и ещё. Библиотекарство как бы в труху превращается.

Так так и пишут.  Вы никогда не ставили пакеты в Линуксе вручную? - вот где зависимости то... Нередко установка одного пакета требует поставить еще 30-40 других...