linux下lvgl8.3动态库编译

LVGL源码官方路径介绍

名称 仓库地址 描述
lvgl https://github.com/lvgl/lvgl.git 包含了LVGL图形界面控件的源码以及少量例程
lv_drivers https://github.com/lvgl/lv_drivers.git 包含了驱动LVGL图形界面的驱动接口源代码
lv_demos https://github.com/lvgl/lv_demos.git LVGL的例程
lv_port_linux_frame_buffer https://github.com/lvgl/lv_port_linux_frame_buffer.git 适配有frame buffer的linux系统的接口

1.新建一个存放lvgl源码目录

复制代码
jamon@ubuntu:~$ mkdir lvgl
jamon@ubuntu:~$ cd lvgl
  1. 进入目录使用git命令下载源码

    jamon@ubuntu:~/lvgl git clone https://github.com/lvgl/lvgl.git jamon@ubuntu:~/lvgl git clone https://github.com/lvgl/lv_drivers.git
    jamon@ubuntu:~/lvgl git clone https://github.com/lvgl/lv_demos.git jamon@ubuntu:~/lvgl git clone https://github.com/lvgl/lv_port_linux_frame_buffer.git

源码下载后,目录结构如下:

  1. 编译lvgl源码为动态库

修改lvgl源码目录下CMakefile.txt文件,添加如下内容:

复制代码
set(CMAKE_C_COMPILER "aarch64-none-linux-gnu-gcc")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
set(CMAKE_INSTALL_PREFIX "/home/jamon/workspace/test_app/lvgl/lv_port_linux-release-v8.3/lvgl/install") #安装路径

修改后内容如下:

修改配置文件env_support/cmake/custom.cmake,编译成动态库:

  1. 编译lv_drivers源码为动态库

(1).拷贝lv_drivers目录下的lv_drv_conf_template.h到上层lvgl目录下,并命名为lv_drv_conf.h

(2).修改CMakeLists.txt文件,修改后完整内容如下:

复制代码
cmake_minimum_required(VERSION 3.12.4)

project(lv_drivers HOMEPAGE_URL https://github.com/lvgl/lv_drivers/)

# Option to build as shared library (as opposed to static), default: OFF
option(BUILD_SHARED_LIBS "Build shared as library (as opposed to static)" ON)


# 设置编译器、编译参数、安装路径
set(CMAKE_C_COMPILER "aarch64-none-linux-gnu-gcc")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
set(CMAKE_INSTALL_PREFIX "/home/jamon/workspace/test_app/lvgl/lv_port_linux-release-v8.3/lv_drivers/install") #安装路径


file(GLOB_RECURSE SOURCES ./*.c)

if (BUILD_SHARED_LIBS)
  add_library(lv_drivers SHARED ${SOURCES})
else()
  add_library(lv_drivers STATIC ${SOURCES})
endif()

add_library(lvgl_drivers ALIAS lv_drivers)
add_library(lvgl::drivers ALIAS lv_drivers)

target_include_directories(lv_drivers SYSTEM PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_include_directories(lv_drivers SYSTEM PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../)   # 添加包含头文件路径


find_package(PkgConfig)
pkg_check_modules(PKG_WAYLAND wayland-client wayland-cursor wayland-protocols xkbcommon)
target_link_directories(lv_drivers PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../lvgl/install/lib)    # 添加lvgl库的路径
target_link_libraries(lv_drivers PUBLIC lvgl ${PKG_WAYLAND_LIBRARIES})

if("${LIB_INSTALL_DIR}" STREQUAL "")
  set(LIB_INSTALL_DIR "lib")
endif()

if("${INC_INSTALL_DIR}" STREQUAL "")
  set(INC_INSTALL_DIR "include/lvgl/lv_drivers")
endif()

install(
  DIRECTORY "${CMAKE_SOURCE_DIR}/"
  DESTINATION "${CMAKE_INSTALL_PREFIX}/${INC_INSTALL_DIR}/"
  FILES_MATCHING
  PATTERN "*.h"
  PATTERN ".git*" EXCLUDE
  PATTERN "CMakeFiles" EXCLUDE
  PATTERN "docs" EXCLUDE
  PATTERN "lib" EXCLUDE
  PATTERN "install" EXCLUDE)    # 安装时跳过install目录,防止.h文件循环安装

file(GLOB LV_DRIVERS_PUBLIC_HEADERS "${CMAKE_SOURCE_DIR}/lv_drv_conf.h")

set_target_properties(
  lv_drivers
  PROPERTIES OUTPUT_NAME lv_drivers
             ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
             LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
             RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
             PUBLIC_HEADER "${LV_DRIVERS_PUBLIC_HEADERS}")

install(
  TARGETS lv_drivers
  ARCHIVE DESTINATION "${LIB_INSTALL_DIR}"
  LIBRARY DESTINATION "${LIB_INSTALL_DIR}"
  RUNTIME DESTINATION "${LIB_INSTALL_DIR}"
  PUBLIC_HEADER DESTINATION "${INC_INSTALL_DIR}")
相关推荐
Dlrb121112 小时前
Linux系统编程-进程及相关指令与函数
linux·进程·并发·进程状态·调度·进程控制指令·进程函数
奋斗的好青年13 小时前
Ubuntu 修复 GRUB 引导并找回 Windows 双系统启动项(NVMe + MBR 环境)
linux·windows·ubuntu
开发者联盟league13 小时前
在ubuntu上安装harbor
linux·运维·ubuntu
ulias21214 小时前
深挖进程间通信的奥秘
java·linux·服务器·开发语言·c++·算法
AOwhisky14 小时前
MySQL 学习笔记(第三期):SQL 语言之数据操作与单表查询
linux·运维·笔记·sql·学习·mysql·云计算
键盘上的猫头鹰15 小时前
【Linux 基础教程(四)】文件内容查看、打包压缩与搜索、重定向管道及环境变量
linux·服务器·python
tellmewhoisi15 小时前
linux 基础知识(文件权限相关)
linux·运维·服务器
jiayong2315 小时前
Claude Code 常见操作实战指南
linux·服务器·网络·ai·claude·claude code
醇氧15 小时前
【Linux 】sudo、sudo -i、su、su - 完整区别总结
linux·运维·服务器
xiaoye-duck16 小时前
《Linux系统编程》System V IPC 进阶:消息队列与信号量从入门到内核
linux