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

34 просмотра

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

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

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

#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Карта сайта