Some APIs Are Missing From LV Drivers Library

After generating the static library for the LV Drivers library I noticed an error occurring during link time where the linker reported that the evdev_init symbol is missing.

There are some missing symbols in the static library. Here is the output after running nm liblv_drivers.a:

CMakeCCompilerId.o:
00000000 t $a
00000000 r $d
00000000 d $d
000000e0 t $d
00000008 D info_arch
00000000 D info_compiler
0000000c D info_language_dialect_default
00000004 D info_platform
00000014 R info_version
00000000 T main

GC9A01.o:

ILI9341.o:

R61581.o:

SHARP_MIP.o:

SSD1963.o:

ST7565.o:

UC1610.o:

drm.o:

fbdev.o:
00000000 t $a
00000194 t $a
000001b8 t $a
0000071c t $a
0000077c t $a
00000000 b $d
00000000 r $d
00000160 t $d
000001b4 t $d
00000710 t $d
00000778 t $d
000007b8 t $d
         U close
00000194 T fbdev_exit
000001b8 T fbdev_flush
0000071c T fbdev_get_sizes
00000000 T fbdev_init
0000077c T fbdev_set_offset
000000ec b fbfd
000000e4 b fbp
000000a0 b finfo
         U ioctl
         U lv_disp_flush_ready
         U memcpy
         U memset
         U mmap
         U open
         U perror
000000e8 b screensize
00000000 b vinfo

gtkdrv.o:

AD_touch.o:

FT5406EE8.o:

XPT2046.o:

evdev.o:

libinput.o:

xkb.o:

sdl.o:

sdl_gpu.o:

wayland.o:

win32drv.o:

win_drv.o:

Take note of the o files that are empty with no symbols (especially evdev.o and libinput.o). This is very strange to see with the static library file. Some o files are included that shouldn’t be present in the static library file (eg win32drv.o). No o files in the static library file should be empty. Why are there missing symbols in the static library file?

Shown below is a part of the program where the missing symbol is being used:

fun main(): Unit = memScoped {
    val displayBufSize = 128 * 1024
    println("Starting LVGL Hello...")
    // Initialize LittlevGL.
    lv_init()
    // Initialize the Linux Frame Buffer.
    fbdev_init()
    // Initialize input devices.
    evdev_init()
    // ...
}

I commented on GitHub.

Enabling EVDEV by setting USE_EVDEV to 1 in the lv_drv_conf.h file, and regenerating the LV Drivers static library file (via CMake) has resolved the issue.

1 Like