首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LVGL CMake未定义的引用

LVGL CMake未定义的引用
EN

Stack Overflow用户
提问于 2022-07-13 02:45:32
回答 1查看 226关注 0票数 0

我正在学习使用LVGL,我计划使用CMake来管理项目。但是当我试图编译时,我遇到了“未定义的引用”。Project如下所示:

代码语言:javascript
复制
.
├── 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或某些头文件。

代码语言:javascript
复制
[ 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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-13 06:11:48

对于这个问题,我有一个愚蠢的解决方案,就是将所有的.c文件添加到SRC_LIST中。

代码语言:javascript
复制
# in C2

FILE(GLOB_RECURSE SRC_LIST ./*.c)

这看起来很不寻常,因为当我用MAKEFILE构建时,它不会产生那么多.o文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72960359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档