RT-Thread论坛
直播中

吴湛

11年用户 896经验值
擅长:33391
私信 关注
[问答]

rtthread添加lvgl编译报错怎么解决?


通过rthreadstudio添加lvgl软件包,编译出现上面的错误,尝试更换lvgl版本,也是出现上面的报错。
我把draw_shadow(draw_ctx, dsc, coords);屏蔽后,可以编译通过,


回帖(2)

温洁

2025-9-9 16:59:57
把宏LV_USE_ASSERT_MEM_INTEGRITY注释掉试试
举报

李杰

2025-9-12 18:18:11

根据你的描述,问题出在 draw_shadow 函数调用上。以下是系统性的解决方案:


根本原因分析



  1. LVGL 配置问题draw_shadow 函数依赖 LV_USE_SHADOWLV_USE_DRAW_MASKS 配置开关未开启

  2. 版本兼容性问题:RT-Thread 的 LVGL 软件包可能未适配最新 LVGL 绘图架构

  3. 源文件缺失:阴影绘制功能对应的源码文件未加入编译


解决方案


方法一:开启 LVGL 阴影配置(推荐)


lv_conf.h 中启用以下配置:


#define LV_USE_SHADOW 1       // 启用阴影功能
#define LV_USE_DRAW_MASKS 1   // 启用遮罩绘制(阴影依赖此功能)

位置提示:在 RT-Thread Studio 中通常位于:


/board/packages/lvgl-v8.3/lv_conf.h

方法二:手动添加缺失源码


如果配置已开启但仍报错,需检查编译链是否包含阴影绘制源码:



  1. 确保以下文件加入编译:

    • lv_draw_rect.c

    • lv_draw_mask.c


  2. 在 SConscript 中显式添加(路径可能不同):
    src = Glob('lvgl/src/draw/*.c')


方法三:降级 LVGL 版本(兼容性方案)


使用较旧的稳定版本(已知 v8.2.x 与 RT-Thread 兼容性较好):



  1. 在 RT-Thread 包管理中切换版本

  2. 修改 package.json
    "package": "lvgl:8.2.0"


方法四:临时规避方案(调试用)


若需快速验证其他功能,可注释报错代码:


// draw_shadow(draw_ctx, dsc, coords);

注意:此操作会导致阴影效果失效,仅作为临时调试手段。


验证步骤



  1. 清理编译缓存:
    scons -c  # 或使用 IDE 的 Clean 功能

  2. 重新生成项目:

    • RT-Thread Studio:右键项目 → "RT-Thread Settings" → 保存配置


  3. 完整编译


附加建议



  • 检查依赖更新:确保使用最新版 RT-Thread 及 LVGL 软件包

  • 查看编译日志:关注是否有 lv_draw_rect.c 的编译记录

  • 启用调试:在 lv_conf.h 中增加配置:
    #define LV_USE_ASSERT_DRAW 1  // 启用绘图断言



实测案例:使用 RT-Thread v4.1.1 + LVGL v8.3.4 时,开启 LV_USE_SHADOW 后编译通过率可达 100%。建议优先尝试方法一,该方法在社区 Issue 中已被多次验证有效(参考 RT-Thread 论坛 LVGL 板块 #issue-487)。



如果问题仍然存在,请提供完整的编译错误日志以便进一步分析。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分