NCS 3.0.0: Linker errors when building LVGL project

Dear DevZone,

While porting our project from NCS 2.9.1 to NCS 3.0.0, I ran into linker errors when building LVGL. The linker reports that it cannot find functions defined in C:\ncs\v3.0.0\modules\lib\gui\lvgl\src\misc\lv_circle_buf.c. It appears that this file is not included in C:\ncs\v3.0.0\zephyr\modules\lvgl\CMakeLists.txt. After manually adding ${LVGL_DIR}/src/misc/lv_circle_buf.c to zephyr_library_sources() to that file, I was able to build the project without any linker errors.

Is this a bug or am I doing something wrong? 

Thanks,

Ladivin

Parents
  • I have the exact same issue, however only when putting LVGL into external XIP flash using:

    zephyr_code_relocate(LIBRARY modules__lvgl LOCATION EXTFLASH_TEXT NOCOPY)
    zephyr_code_relocate(LIBRARY modules__lvgl LOCATION RAM_DATA)
    Did you find any hints?
    Must be something related. It worked in 2.9.1 for me.
    Adding 
    zephyr_library_sources(${LVGL_ROOT_DIR}/src/misc/lv_circle_buf.c) in modules/lib/gui/lvgl/env_support/cmake/zephyr.cmake did not make any difference.
    arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: modules/lvgl/libmodules__lvgl.a(lv_iter.c.obj): in function `lv_iter_destroy':
    modules/lib/gui/lvgl/src/misc/lv_iter.c:98: undefined reference to `lv_circle_buf_destroy'
    arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: modules/lvgl/libmodules__lvgl.a(lv_iter.c.obj): in function `lv_iter_make_peekable':
    modules/lib/gui/lvgl/src/misc/lv_iter.c:112: undefined reference to `lv_circle_buf_create'
    arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: modules/lvgl/libmodules__lvgl.a(lv_iter.c.obj): in function `lv_iter_next':
    modules/lib/gui/lvgl/src/misc/lv_iter.c:122: undefined reference to `lv_circle_buf_is_empty'
    arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: modules/lib/gui/lvgl/src/misc/lv_iter.c:123: undefined reference to `lv_circle_buf_read'
    arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: modules/lib/gui/lvgl/src/misc/lv_iter.c:124: undefined reference to `lv_circle_buf_skip'
    arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: modules/lvgl/libmodules__lvgl.a(lv_iter.c.obj): in function `lv_iter_peek':
    modules/lib/gui/lvgl/src/misc/lv_iter.c:145: undefined reference to `lv_circle_buf_size'
    arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: modules/lib/gui/lvgl/src/misc/lv_iter.c:148: undefined reference to `lv_circle_buf_fill'
    arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: modules/lib/gui/lvgl/src/misc/lv_iter.c:152: undefined reference to `lv_circle_buf_peek_at'
    arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: modules/lvgl/libmodules__lvgl.a(lv_iter.c.obj): in function `lv_iter_peek_advance':
    modules/lib/gui/lvgl/src/misc/lv_iter.c:162: undefined reference to `lv_circle_buf_capacity'
    Edit:
    Found the issue, the file is missing in this file zephyr/modules/lvgl/CMakeLists.txt
    I was also adding the zephyr_library_sources to the wrong cmake file, did it in the one zephyr.cmake inside lvgl, which is not the one used.
Reply
  • I have the exact same issue, however only when putting LVGL into external XIP flash using:

    zephyr_code_relocate(LIBRARY modules__lvgl LOCATION EXTFLASH_TEXT NOCOPY)
    zephyr_code_relocate(LIBRARY modules__lvgl LOCATION RAM_DATA)
    Did you find any hints?
    Must be something related. It worked in 2.9.1 for me.
    Adding 
    zephyr_library_sources(${LVGL_ROOT_DIR}/src/misc/lv_circle_buf.c) in modules/lib/gui/lvgl/env_support/cmake/zephyr.cmake did not make any difference.
    arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: modules/lvgl/libmodules__lvgl.a(lv_iter.c.obj): in function `lv_iter_destroy':
    modules/lib/gui/lvgl/src/misc/lv_iter.c:98: undefined reference to `lv_circle_buf_destroy'
    arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: modules/lvgl/libmodules__lvgl.a(lv_iter.c.obj): in function `lv_iter_make_peekable':
    modules/lib/gui/lvgl/src/misc/lv_iter.c:112: undefined reference to `lv_circle_buf_create'
    arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: modules/lvgl/libmodules__lvgl.a(lv_iter.c.obj): in function `lv_iter_next':
    modules/lib/gui/lvgl/src/misc/lv_iter.c:122: undefined reference to `lv_circle_buf_is_empty'
    arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: modules/lib/gui/lvgl/src/misc/lv_iter.c:123: undefined reference to `lv_circle_buf_read'
    arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: modules/lib/gui/lvgl/src/misc/lv_iter.c:124: undefined reference to `lv_circle_buf_skip'
    arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: modules/lvgl/libmodules__lvgl.a(lv_iter.c.obj): in function `lv_iter_peek':
    modules/lib/gui/lvgl/src/misc/lv_iter.c:145: undefined reference to `lv_circle_buf_size'
    arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: modules/lib/gui/lvgl/src/misc/lv_iter.c:148: undefined reference to `lv_circle_buf_fill'
    arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: modules/lib/gui/lvgl/src/misc/lv_iter.c:152: undefined reference to `lv_circle_buf_peek_at'
    arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd: modules/lvgl/libmodules__lvgl.a(lv_iter.c.obj): in function `lv_iter_peek_advance':
    modules/lib/gui/lvgl/src/misc/lv_iter.c:162: undefined reference to `lv_circle_buf_capacity'
    Edit:
    Found the issue, the file is missing in this file zephyr/modules/lvgl/CMakeLists.txt
    I was also adding the zephyr_library_sources to the wrong cmake file, did it in the one zephyr.cmake inside lvgl, which is not the one used.
Children
No Data
Related