В Adafruit ImageReader Library 2.3.5 добавлено несколько зависимостей библиотек.

Почему библиотека Adafruit ImageReader версии 2.3.5 недавно добавила шесть зависимостей от других библиотек для оборудования, которое я не использую?

Два месяца назад я успешно использовал библиотеку Adafruit ImageReader версии 2.3.2. Пример скетча отлично работал с моим 3,2-дюймовым дисплеем ILI9341 и его SD-картой.

Теперь доступна обновленная версия 2.3.5, но менеджер библиотеки хочет добавить еще шесть "зависимых" библиотек: - Библиотека Adafruit ST7735 и ST7789 - Библиотека качелей Adafruit - Библиотека Adafruit HX8357 - библиотека Adafruit SSD1351 - Библиотека драйверов Adafruit SSD1331 OLED для Arduino - Adafruit EPD

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

Если я не приму дополнительные библиотеки, мой скетч не скомпилируется. Сообщение об ошибке: «C:\Users\barry\Documents\Arduino\libraries\Adafruit_ImageReader_Library\Adafruit_ImageReader_EPD.h:18:10: фатальная ошибка: Adafruit_EPD.h: нет такого файла или каталога»

Однако код EPD предназначен для «дисплеев на электронной бумаге», что не относится к моему ILI9341, который представляет собой TFT-дисплей. Я не думаю, что код EPD должен быть реальной зависимостью.

Пожалуйста, перенаправьте меня, если есть место, где лучше спросить.

, 👍0


1 ответ


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

0

Если вы не используете функции библиотеки ImageReader, которые используют дополнительные библиотеки, ваш скомпилированный код не будет содержать код из дополнительных библиотек.

Библиотека Adafruit ImageReader может иметь функции, которые используют другие библиотеки, и эти библиотеки необходимы для компиляции. Но при линковке скомпилированных юнитов, которые не используются вашим кодом, и даже части скомпилированных юнитов, которые не используются вашим кодом, не помещаются в результирующий hex или bin файл.

,

Я искренне надеюсь, что компоновщик достаточно умен, чтобы пропустить скомпилированные модули, которые не используются. Однако компоновщики могут работать только с внешними ссылками между компонентами и не могут обнаруживать использование во время выполнения., @Barry

Итак, в моем случае, если в библиотеке ImageReader где-либо есть оператор «new EPD()» (я не знаю, есть он или нет), так что создание экземпляра происходит во время выполнения, компоновщик должен включать код библиотеки EPD. , независимо от того, вызывалась она когда-либо или нет, верно? В итоге, я думаю, мне нужно получить чистую компиляцию, найти файл .elf и создать карту памяти, чтобы увидеть, какие компоненты включены. Спасибо!, @Barry

да, есть вещи, где компилятор не может оценить зависимости (например, виртуальные методы классов), но new EPD() не входит в их число. здесь во время компиляции ясно, что будет использоваться класс EPD., @Juraj

Я надеюсь получить ответ на первоначальный вопрос «Почему в Adafruit ImageReader Library v2.3.5 недавно добавлено шесть зависимостей от других библиотек для оборудования, которое я не использую?» На GitHub в описании библиотеки говорится только: «Требуется библиотека Adafruit_GFX и одна из библиотек цветного графического дисплея SPI, например Adafruit_ILI9341». Однако текущая версия зависит от шести дополнительных библиотек для другого оборудования. [ссылка](https://github.com/adafruit/Adafruit_ImageReader), @Barry

@Barry, причина в CI-тестах примеров https://groups.google.com/a/arduino.cc/forum/#!topic/developers/kMS80BNOLW8, @Juraj

Юрай, по вашей ссылке я узнал о Travis CI, автоматизированной системе непрерывной интеграции, и следил за советами по проверке сборки моих проектов Arduino для различных процессоров. Хорошая вещь. Это будет полезно для моих проектов Feather M4 (SAMD51). Я рассмотрю проблему раздувания кода отдельно. Мне нужно написать примеры программ и изучить полученную карту памяти. Тогда я смогу сказать, сколько неиспользуемых библиотек для неиспользуемого оборудования в итоге оказывается в скомпилированном объектном коде. В любом случае, это отдельная тема, и на этот вопрос есть хороший ответ., @Barry

@Barry, если дополнительные библиотеки используются только в примерах, то для них нет пути к вашему коду., @Juraj