如何修复 LVGL undefined reference to 'lv_log_register_print_cb'

问题

编译基于 LVGL/Adafruit 的应用时,你看到如下链接器错误消息

lvgl_linker_error.txt
Linking .pio/build/esp32dev/firmware.elf
/home/uli/.platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: .pio/build/esp32dev/lib67d/libAdafruit LittlevGL Glue Library.a(Adafruit_LvGL_Glue.cpp.o):(.literal._ZN18Adafruit_LvGL_Glue5beginEP15Adafruit_SPITFTPvb+0x44): undefined reference to `lv_log_register_print_cb'
/home/uli/.platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: .pio/build/esp32dev/lib67d/libAdafruit LittlevGL Glue Library.a(Adafruit_LvGL_Glue.cpp.o): in function `Adafruit_LvGL_Glue::begin(Adafruit_SPITFT*, void*, bool)':
/dev/shm/Test/.pio/libdeps/esp32dev/Adafruit LittlevGL Glue Library/Adafruit_LvGL_Glue.cpp:364: undefined reference to `lv_log_register_print_cb'
collect2: error: ld returned 1 exit status
*** [.pio/build/esp32dev/firmware.elf] Error 1

解决方案

此错误是由 Adafruit LVGL 绑定库使用 lv_log_register_print_cb 引起的,而你的 LVGL 日志配置说明直接使用 printf()

解决方法很简单:只需在代码中定义一个空的 lv_log_register_print_cb 函数:

lv_log_register_print_cb_fix.cpp
void lv_log_register_print_cb(lv_log_print_g_cb_t print_cb) {
  // Do nothing, not needed here!
}

Check out similar posts by category: LVGL, C/C++, Embedded