使用g++编译lvgl出现错误
-
应用程序使用到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'}
-
@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 };
-
@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有点东西
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号