我正在学习使用LVGL,我计划使用CMake来管理项目。但是当我试图编译时,我遇到了“未定义的引用”。Project如下所示:
.
├── build
├── CMakeLists.txt // C1
└── src
├── CMakeLists.txt // C2
├── lv_conf.h
├── lv_demo_conf.h
├── lv_demos
│ ├── CMakeLists.txt // C3
│ └── src
├── lv_drivers
│ ├── CMakeLists.txt // C4
│ ├── display
│ ├── docs
│ ├── gtkdrv
│ ├── indev
│ ├── library.json
│ ├── LICENSE
│ ├── lv_drivers.mk
│ ├── lv_drv_conf_template.h
│ ├── README.md
│ ├── sdl
│ ├── wayland
│ ├── win32drv
│ ├── win_drv.c
│ └── win_drv.h
├── lv_drv_conf.h
├── lvgl
│ ├── CMakeLists.txt // C5
│ └── src
├── main.c
└── mouse_cursor_icon.c虽然我试图使,日志如下,它似乎我没有添加包含dir或某些头文件。
[ 76%] Linking C static library liblvgl_lib.a
[ 76%] Built target lvgl_lib
Scanning dependencies of target demo
[ 76%] Building C object bin/CMakeFiles/demo.dir/main.c.o
[ 77%] Linking C executable demo
/usr/local/arm/arm-linux-musleabi-cross/bin/../lib/gcc/arm-linux-musleabi/11.2.1/../../../../arm-linux-musleabi/bin/ld: CMakeFiles/demo.dir/main.c.o: in function `main':
/home/xjt/F1C100S_LVGL_DEMO_WITH_CMAKE/src/main.c:18: undefined reference to `fbdev_init'
/usr/local/arm/arm-linux-musleabi-cross/bin/../lib/gcc/arm-linux-musleabi/11.2.1/../../../../arm-linux-musleabi/bin/ld: /home/xjt/F1C100S_LVGL_DEMO_WITH_CMAKE/src/main.c:36: undefined reference to `evdev_init'
/usr/local/arm/arm-linux-musleabi-cross/bin/../lib/gcc/arm-linux-musleabi/11.2.1/../../../../arm-linux-musleabi/bin/ld: /home/xjt/F1C100S_LVGL_DEMO_WITH_CMAKE/src/main.c:54: undefined reference to `lv_demo_widgets'
/usr/local/arm/arm-linux-musleabi-cross/bin/../lib/gcc/arm-linux-musleabi/11.2.1/../../../../arm-linux-musleabi/bin/ld: /home/xjt/F1C100S_LVGL_DEMO_WITH_CMAKE/src/main.c:58: undefined reference to `fbdev_flush'
/usr/local/arm/arm-linux-musleabi-cross/bin/../lib/gcc/arm-linux-musleabi/11.2.1/../../../../arm-linux-musleabi/bin/ld: /home/xjt/F1C100S_LVGL_DEMO_WITH_CMAKE/src/main.c:58: undefined reference to `evdev_read'
/usr/local/arm/arm-linux-musleabi-cross/bin/../lib/gcc/arm-linux-musleabi/11.2.1/../../../../arm-linux-musleabi/bin/ld: /home/xjt/F1C100S_LVGL_DEMO_WITH_CMAKE/src/main.c:58: undefined reference to `mouse_cursor_icon'
/usr/local/arm/arm-linux-musleabi-cross/bin/../lib/gcc/arm-linux-musleabi/11.2.1/../../../../arm-linux-musleabi/bin/ld: lvgl/liblvgl_lib.a(lv_extra.c.o): in function `lv_extra_init':这是我的CMakeLists.txt,C1:
PROJECT(F1C100S_DEMO_WITH_CMAKE)
CMAKE_MINIMUM_REQUIRED(VERSION 3.5)
# INCLUDE_DIRECTORIES(./lib/gpiod/include)
# LINK_DIRECTORIES(./lib/gpiod/lib)
SET(CMAKE_C_COMPILER "arm-linux-musleabi-gcc")
SET(CMAKE_EXE_LINKER_FLAGS "-static")
ADD_COMPILE_OPTIONS(-g)
ADD_SUBDIRECTORY(src bin)C2:
AUX_SOURCE_DIRECTORY(. SRC_LIST)
# SET(
# ${SRC_LIST}
# lv_drivers/indev/evdev.h
# lv_drivers/display/fbdev.h
# lvgl/demos/lv_demos.h
# )
ADD_SUBDIRECTORY(./lvgl)
ADD_SUBDIRECTORY(./lv_drivers)
ADD_SUBDIRECTORY(./lv_demos)
LINK_DIRECTORIES(./lvgl)
INCLUDE_DIRECTORIES(./lvgl)
SET(
LIB_LIST
lvgl_lib
)
SET(
${LIB_LIST}
lv_drv_lib
)
SET(
${LIB_LIST}
lv_demos_lib
)
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR/bin})
ADD_EXECUTABLE(demo ${SRC_LIST})
# TARGET_LINK_LIBRARIES(demo gpiod)
TARGET_LINK_LIBRARIES(demo ${LIB_LIST})C3:
AUX_SOURCE_DIRECTORY(./src/lv_demo_benchmark DIR_LV_DEMOS_SRC)
AUX_SOURCE_DIRECTORY(./src/lv_demo_keypad_encoder DIR_LV_DEMOS_SRC)
AUX_SOURCE_DIRECTORY(./src/lv_demo_music DIR_LV_DEMOS_SRC)
AUX_SOURCE_DIRECTORY(./src/lv_demo_stress DIR_LV_DEMOS_SRC)
AUX_SOURCE_DIRECTORY(./src/lv_demo_widgets DIR_LV_DEMOS_SRC)
ADD_LIBRARY(lv_demos_lib ${DIR_LV_DEMOS_SRC})C3和C4类似于C2,只有AUX_SOURCE_DIRECTORY和ADD_LIBRARY。
发布于 2022-07-13 06:11:48
对于这个问题,我有一个愚蠢的解决方案,就是将所有的.c文件添加到SRC_LIST中。
# in C2
FILE(GLOB_RECURSE SRC_LIST ./*.c)这看起来很不寻常,因为当我用MAKEFILE构建时,它不会产生那么多.o文件。
https://stackoverflow.com/questions/72960359
复制相似问题