试用 LVGL Pro,一套完整的工具包,助您高效构建、测试、分享和交付 UI!
LVGL
公告

apt install lvgl

LVGL 现在通过 Launchpad PPA 提供预编译的 Ubuntu 软件包。从一个全新安装的系统到跑起一个 SDL 窗口,完全不需要自己编译 LVGL。

安德烈·科斯塔安德烈·科斯塔8 分钟阅读
apt install lvgl

本系列的前两篇都在讲如何构建 LVGL。它先学会了自动拉取自己的依赖, 又学会了把自己链接了哪些库记录下来,好让别的项目直接拿去用。 但这两篇都还要你自己编译 LVGL。

在 Ubuntu 上已经不必这样了。LVGL 现在提供预编译的软件包,安装它和安装系统里其他任何软件没有区别。 下面就是完整的过程:从一个全新的 Ubuntu,到屏幕上出现一个窗口。

从全新的 Ubuntu 到运行中的窗口#

1. 安装构建工具

apt update
apt install software-properties-common build-essential pkg-config
bash

software-properties-common 提供 add-apt-repository,build-essential 则提供编译器。

2. 添加 LVGL PPA

add-apt-repository ppa:lvgl/lvgl
bash

3. 安装一个 LVGL 软件包

apt install liblvgl-sdl2-dev
# 或者,安装包含全部后端的软件包:
# apt install liblvgl-full-2d-dev
bash

这一条命令还会把 SDL2 以及这次 LVGL 构建所需要的其他一切一并装上。你不用再去逐个寻找 -dev 软件包, 全部已发布的软件包列在下面。

4. 编写应用程序

这和第二篇里的程序完全一样。唯一的区别只是 LVGL 是怎么进到这台机器上的。

main.c
#include <lvgl/lvgl.h>
 
int main(void)
{
    lv_init();
 
    lv_display_t * disp = lv_sdl_window_create(800, 600);
    if(!disp) {
        return 1;
    }
    lv_sdl_mouse_create();
 
    lv_obj_t * button = lv_button_create(lv_screen_active());
    lv_obj_t * label  = lv_label_create(button);
    lv_label_set_text_static(label, "Click Me!");
    lv_obj_center(button);
 
    while(1) {
        lv_timer_handler();
        lv_sleep_ms(5);
    }
 
    return 0;
}
c

5. 编译并运行

# --static 会把 Requires.private 和 Libs.private 也一并引入
gcc main.c -o main $(pkg-config --cflags --static --libs lvgl)
bash

不需要 LVGL 的源码副本,也不需要构建 LVGL。pkg-config 或 CMake 会把头文件路径和完整的链接参数交给编译器,窗口就打开了。

全部已发布的软件包#

这些软件包放在 ppa:lvgl/lvgl 这个 PPA 里。给 LVGL 做打包很难,因为大家想要的东西是互相矛盾的:有人想要一个精简的安装, 也有人希望大部分功能都是打开的,好快速上手、随手试试各种东西。第一轮我们选了后者:配置给得比较满,大部分功能都开着, 尽管一个真正的项目多半会关掉其中相当一部分。

一共有 8 个软件包,按各自启用了哪些显示后端来划分:

  • liblvgl-sdl2-dev:SDL2 桌面后端,仅 2D
  • liblvgl-sdl2-3d-dev:SDL2 桌面后端,带 3D
  • liblvgl-drm-dev:DRM 后端,仅 2D
  • liblvgl-drm-3d-dev:DRM 后端,带 3D
  • liblvgl-wayland-dev:Wayland 后端,仅 2D
  • liblvgl-wayland-3d-dev:Wayland 后端,带 3D
  • liblvgl-full-2d-dev:SDL2、DRM 和 Wayland 三者兼备,仅 2D
  • liblvgl-full-3d-dev:SDL2、DRM 和 Wayland 三者兼备,带 3D

后端是这些软件包之间唯一的区别,jpeg 和 png 图片解码器、GStreamer 以及其余的功能集在所有软件包里都是启用的。

这 8 个软件包各自对应一次不同的 LVGL 构建,因此每一个链接的库也不一样。 要让一个软件包真正能用,它必须在两个地方把这些库正确声明出来:一是告诉 apt,好把正确的运行时库一并装上;二是告诉 pkg-config, 好让你自己的编译器链接到它们。这两份清单都直接来自 LVGL 构建过程中生成的文件。每个 .deb 都带着自己的 lvgl.pc 和 CMake 配置文件, 安装到系统的标准路径下。所以软件包一旦装到你的机器上,pkg-config 就能找到它,不需要额外做任何设置。

如果你想知道 pkg-config 和 CMake 配置文件是怎么生成的,可以看看本系列的第二篇。

提示

换后端只会动到第 3 步和你创建显示屏的那一行。改成安装 liblvgl-wayland-dev,把 lv_sdl_window_create() 换成 lv_wayland_window_create(),编译命令则完全不用变,因为每个软件包都自带了它自己的依赖清单。

它是怎么做到的#

那五个步骤能走通,靠的是三件事正好对上了。

.deb 是一种软件包。它里面装着编译好的库或程序、头文件,以及一份它所需要的其他软件包的清单。 apt 是安装 .deb 文件的工具;安装时它会读这份清单,把上面列的东西也一起装上,这就是第 3 步为什么不用你开口就把 SDL2 装好了。 PPA 是 Personal Package Archive(个人软件包存档)的缩写,指的是 Ubuntu 的 Launchpad 服务上的一块地方,项目可以在那里托管自己的软件包;而第 2 步里的 add-apt-repository 就是让 apt 指向它的方式。

Ubuntu 的主仓库不可能收录所有东西,而它收录的版本往往也偏旧。PPA 就是一个项目把自己的最新构建直接交到用户手里的办法。

小结#

回头看这三篇,每一篇都踩在前一篇的肩膀上。自动解析依赖,才使得准确记录 LVGL 链接了哪些库成为可能。 把它记录下来,才使得生成正确的 pkg-config 和 CMake 文件成为可能。而正是这些文件,才让一个 .deb 能干净地装上, 并在另一台机器上链接成功。

来试试这个 PPA 吧。如果某个软件包出了问题,或者你希望我们再发布别的配置,欢迎到 github.com/lvgl/lvgl/issues 提 issue。

在 Linux 上构建与分发 LVGL第 3 部分,共 4 部分

常见问题#

关于作者

安德烈·科斯塔
安德烈·科斯塔

LVGL Open 团队负责人

LVGL Open 团队负责人,推动开源嵌入式图形库的开发和应用。

认识博客背后的作者们

了解那些分享 LVGL 知识的优秀作者们

查看作者

订阅我们的通讯 不错过任何关于 LVGL 的新闻。我们每月最多发送 2 封邮件。

LVGL

LVGL 是最受欢迎的免费开源嵌入式图形库,支持任何 MCU、MPU 和显示类型,助您构建精美的用户界面。

我们还提供 UI 设计、实现和咨询等服务。

© 2026 LVGL。保留所有权利。
YouTubeGitHubLinkedIn