189 похожих чатов

Коллеги, а есть какой-то способ отследить последовательность включения #include-файлов? Компилирую LVGL

под ESP-IDF. Компилятор ругается на файлы ресурсов:

../components/menu_engine/interface_resources/battery_icon_charging_RGB565A8.c:29:30: error: unknown type name 'LV_ATTRIBUTE_LARGE_CONST' const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BATTERY_
ICON_CHARGING uint8_t battery_icon_charging_map[] = {
^~~~~~~~~~~~~~~~~~~~~~~~
../components/menu_engine/interface_resources/battery_icon_charging_RGB565A8.c:6
2:7: error: unknown type name 'lv_img_dsc_t'
const lv_img_dsc_t battery_icon_charging = {
^~~~~~~~~~~~

Ну и так далее. Понятно - не может найти объявление типа. Типы, которые не может найти компилятор, определены в lv_img_buf.h.

lv_img_buf.h включается из lvgl.h.

В начале файла battery_icon_charging_RGB565A8.c есть такой код (с моими добавлениями):

#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
#warning LVGL 1 included
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif

#ifdef LV_IMG_BUF_H
#warning LV_IMG_BUF_H OK
#else
#error LV_IMG_BUF_H not defined
#endif // LV_IMG_BUF_H

Компилятор пишет следующее:

../components/menu_engine/interface_resources/battery_icon_charging_RGB565A8.c:
0:6: warning: #warning LVGL 1 included [-Wcpp]
#warning LVGL 1 included
^~~~~~~
../components/menu_engine/interface_resources/battery_icon_charging_RGB565A8.c:
9:2: error: #error LV_IMG_BUF_H not defined
#error LV_IMG_BUF_H not defined

То есть, в итоге, он как бы подключил lvgl.h, но файл lv_img_buf.h, который включается из lvgl.h, оказался не включен в battery_icon_charging_RGB565A8.c. Такое впечатление, как будто есть какое-то ограничение по глубине включения.

Никто не знает, в чем может быть дело?

14 ответов

39 просмотров

Очень тупой тезис, но #include просто ж копипастит содержимое ровно туда, где он написан

Скорее или условное включение, или в каком-то хедере накосячили с одинаковыми ifndef в начале

Electronics-Designer Автор вопроса
Petr Belyaev
Очень тупой тезис, но #include просто ж копипастит...

Да. Но ВНЕЗАПНО тут оно не хочет так работать, как видно. Сам в офигении. Но вы таки не поверите - я добавил REQUIRES lvgl в CMakeLists для того компонента, в котором проблема. и ошибки пропали! Как работа #include завязана на CMakeLists - я ХЗ.

Electronics Designer
Да. Но ВНЕЗАПНО тут оно не хочет так работать, как...

Скорее всего у тебя кеш у cmake без этой либы остался с прошлых его запусков (а может это барабашка).

Electronics-Designer Автор вопроса
Viktor Chyzhdzenka
Скорее всего у тебя кеш у cmake без этой либы оста...

Она собирается из исходников. Но блин, заголовочник-то должен искать сам компилятор, не?

Electronics Designer
Она собирается из исходников. Но блин, заголовочн...

Он его ищет по ключику -I и переменной среды INCLUDE

Electronics-Designer Автор вопроса
Viktor Chyzhdzenka
Он его ищет по ключику -I и переменной среды INCLU...

Пути прописаны верно, все остальное находится и находит.

Electronics-Designer Автор вопроса
Electronics Designer
Пути прописаны верно, все остальное находится и на...

Ну значит "барабашка". Для изгнания барабашек используют шаманский бубен.

Electronics Designer
Там просто нет двух версий. :)

Когда юзаешь стороннее с глубоким внутренним миром, всегда есть шанс назвать свой файл дублирующим именем

Electronics-Designer Автор вопроса
Michael Isaev
Когда юзаешь стороннее с глубоким внутренним миром...

lvgl для этого проекта я прикручивал сам ровно по той причине, что готовая сборка для ESP-IDF выглядит, эээ, странно.

Electronics Designer
Да. Но ВНЕЗАПНО тут оно не хочет так работать, как...

cmake изобрёл новый термин — жопипаста когда рабочий код не работает

Ну, можно скомпилировать с -save-temps и посмотреть на результат работы препроцессора.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта