Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页

    使用g++编译lvgl出现错误

    GUI
    3
    3
    1839
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • L
      lingeasy LV 5 last edited by

      应用程序使用到c++的库和功能,但发现在编译lvgl的时候出现错误。
      编译配置如下:

      CTOOL := riscv64-unknown-linux-gnu-
      CCL := ~/workspace/tina-D1s/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702
      CC := ${CCL}/bin/${CTOOL}g++
      LVGL_DIR_NAME ?= lvgl
      LVGL_DIR ?= ${shell pwd}
      CFLAGS ?= -O3 -g0 -I$(LVGL_DIR)/ -Wshadow -Wundef   \
      -Wno-unused-function -Wno-error=strict-prototypes -Wpointer-arith -fno-strict-aliasing -Wno-error=cpp \
      -Wuninitialized -Wmaybe-uninitialized -Wno-unused-parameter -Wtype-limits \
      -Wsizeof-pointer-memaccess -Wno-format-nonliteral -Wno-cast-qual -Wunreachable-code -Wno-switch-default -Wreturn-type \
      -Wmultichar -Wformat-security -Wno-ignored-qualifiers -Wno-error=pedantic -Wno-sign-compare -Wno-error=missing-prototypes \
      -Wdouble-promotion -Wclobbered -Wdeprecated -Wempty-body -Wtype-limits -Wshift-negative-value -Wstack-usage=2048 \
      -Wno-unused-value -Wno-unused-parameter -Wuninitialized -Wmaybe-uninitialized \
      -Wextra -Wno-unused-parameter -Wtype-limits -Wsizeof-pointer-memaccess -Wno-format-nonliteral \
      -Wpointer-arith -Wno-cast-qual  -Wunreachable-code -Wno-switch-default -Wreturn-type -Wmultichar \
      -Wformat-security -Wno-ignored-qualifiers -Wno-sign-compare -std=c++2a -fpermissive -Wmissing-field-initializers
      LDFLAGS ?= -lm
      

      编译出现问题如下,有谁知道如果解决。

      lvgl/src/core/lv_obj.c:79:1: error: designator order for field '_lv_obj_class_t::base_class' does not match declaration order in 'const lv_obj_class_t' {aka 'const _lv_obj_class_t'}
      
      whycan 1 Reply Last reply Reply Quote Share 0
      • whycan
        whycan晕哥 LV 9 @lingeasy last edited by whycan

        @lingeasy 在 使用g++编译lvgl出现错误 中说:

        lvgl/src/core/lv_obj.c:79:1: error: designator order for field '_lv_obj_class_t::base_class' does not match declaration order in 'const lv_obj_class_t' {aka 'const _lv_obj_class_t'}

        以下是chatgpt告诉我的:

        这个错误提示是因为在代码中使用了 C99 标准新增的结构体成员初始化语法,并且使用了成员名字来初始化,但成员初始化顺序不一致。

        具体地说,C99 标准允许在定义结构体变量时使用类似下面的语法:

        struct my_struct {
          int x;
          int y;
          int z;
        };
        
        struct my_struct s = {
          .y = 42,
          .x = 3,
          .z = 0,
        };
        

        这种语法叫做结构体成员初始化语法(Designated Initializers),它可以用来显式地指定结构体成员的初始值,以及避免未初始化的结构体成员。

        但是,这种语法在 C99 标准之前是不支持的,而且不是所有的编译器都支持这种语法。因此,如果使用了这种语法,并且编译器不支持,就会出现错误。

        具体到您的错误提示,它提示的是 _lv_obj_class_t 结构体成员初始化时的顺序与 const lv_obj_class_t 结构体成员的声明顺序不一致。要解决这个问题,可以将结构体成员初始化的顺序改为与声明顺序一致,或者使用旧的结构体初始化语法。例如:

        const lv_obj_class_t lv_obj_class = {
          .base_class = NULL,
          .constructor_cb = lv_obj_constructor,
          .destructor_cb = lv_obj_destructor,
          .event_cb = lv_obj_event_handler,
          .width_def = LV_SIZE_CONTENT,
          .height_def = LV_SIZE_CONTENT,
          .instance_size = sizeof(lv_obj_t),
          .editable = 0,
          .group_def = 0,
        };
        

        或者:

        const lv_obj_class_t lv_obj_class = {
          NULL,  // base_class
          lv_obj_constructor,
          lv_obj_destructor,
          lv_obj_event_handler,
          LV_SIZE_CONTENT,  // width_def
          LV_SIZE_CONTENT,  // height_def
          sizeof(lv_obj_t), // instance_size
          0,                // editable
          0,                // group_def
        };
        
        xiaowenge 1 Reply Last reply Reply Quote Share 0
        • xiaowenge
          DOT小文哥 LV 8 @whycan last edited by

          @whycan 在 使用g++编译lvgl出现错误 中说:

          @lingeasy 在 使用g++编译lvgl出现错误 中说:

          lvgl/src/core/lv_obj.c:79:1: error: designator order for field '_lv_obj_class_t::base_class' does not match declaration order in 'const lv_obj_class_t' {aka 'const _lv_obj_class_t'}

          以下是chatgpt告诉我的:

          这个错误提示是因为在代码中使用了 C99 标准新增的结构体成员初始化语法,并且使用了成员名字来初始化,但成员初始化顺序不一致。

          具体地说,C99 标准允许在定义结构体变量时使用类似下面的语法:……

          chatGPT有点东西

          1 Reply Last reply Reply Quote Share 0
          • 1 / 1
          • First post
            Last post

          Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

          行为准则 | 用户协议 | 隐私权政策