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 ответов

11 просмотров

Очень тупой тезис, но #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 и посмотреть на результат работы препроцессора.

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

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

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
TCodePointer = record cp: CodePointer; name: string; cnt: Integer; next: TCodePointerArray; // этот тип ещё неизвестен end; TCodePointerArray = array of ...
notme
9
Привет ) есть такой кусок кода, он считывает ini файл. my $conf = Config::IniFiles->new( -file => $ini_file ); if (!$conf) { $self->my_die('cannot_read_cfg', ...
Kolya lastname
7
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
Блин, интересно, кто-нибудь когда-нибудь переписывал какую-нибудь игру с x86 на arm? Вообще, такое возможно?
Alan 🔝 Бэброу
13
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Ну тогда у меня вопрос... ) А вот в Delphi 7, к примеру, это что не решаемая задача была бы? (дженериков то ещё нету) Эта: https://t.me/Delphi_Lazarus/319568
notme
5
здравствуйте, братья, кто-нибудь знает, как работать с Swift.com или Swift.net?
Ozzy
6
@wit01d How are you? What are you studying these days, curious man ?
Sahand 🏔️
6
💵 Хочешь получать стабильный заработок от 600 и до 800 $ в неделю ? 📱Для работы нужен только телефон. 🛑БЕСПЛАТНОЕ обучение для каждого. 🔶 Не имеет значения, есть ли у вас оп...
Бағдат Амир
3
Карта сайта