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!
}Pokud vám tento článek pomohl, zvažte, zda mi nekoupíte kávu nebo nepřispějete přes PayPal na podporu výzkumu a publikování nových článků na TechOverflow