Jak opravit LVGL undefined reference to 'lv_log_register_print_cb'

Problém

Při kompilaci vaší LVGL/Adafruit based aplikace vidíte linker error message jako

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

Řešení

Tato chyba je způsobena tím, že Adafruit LVGL binding library používá lv_log_register_print_cb, zatímco vaše LVGL log config říká, abyste přímo používali printf().

Řešení je jednoduché: Prostě definujte prázdnou lv_log_register_print_cb funkci ve vašem kódu:

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!
}

Podívejte se na podobné články podle kategorie: LVGL C/C++ Embedded