本系列的前两篇都在讲如何构建 LVGL。它先学会了自动拉取自己的依赖, 又学会了把自己链接了哪些库记录下来,好让别的项目直接拿去用。 但这两篇都还要你自己编译 LVGL。
在 Ubuntu 上已经不必这样了。LVGL 现在提供预编译的软件包,安装它和安装系统里其他任何软件没有区别。 下面就是完整的过程:从一个全新的 Ubuntu,到屏幕上出现一个窗口。
从全新的 Ubuntu 到运行中的窗口#
1. 安装构建工具
apt update
apt install software-properties-common build-essential pkg-configbashsoftware-properties-common 提供 add-apt-repository,build-essential 则提供编译器。
2. 添加 LVGL PPA
add-apt-repository ppa:lvgl/lvglbash3. 安装一个 LVGL 软件包
apt install liblvgl-sdl2-dev
# 或者,安装包含全部后端的软件包:
# apt install liblvgl-full-2d-devbash这一条命令还会把 SDL2 以及这次 LVGL 构建所需要的其他一切一并装上。你不用再去逐个寻找 -dev 软件包,
全部已发布的软件包列在下面。
4. 编写应用程序
这和第二篇里的程序完全一样。唯一的区别只是 LVGL 是怎么进到这台机器上的。
#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;
}c5. 编译并运行
# --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 桌面后端,仅 2Dliblvgl-sdl2-3d-dev:SDL2 桌面后端,带 3Dliblvgl-drm-dev:DRM 后端,仅 2Dliblvgl-drm-3d-dev:DRM 后端,带 3Dliblvgl-wayland-dev:Wayland 后端,仅 2Dliblvgl-wayland-3d-dev:Wayland 后端,带 3Dliblvgl-full-2d-dev:SDL2、DRM 和 Wayland 三者兼备,仅 2Dliblvgl-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。
- 50 行代码上手 LVGL v9.6
- 安装 LVGL,依赖一并奉上
- 3apt install lvgl当前位置
- 4在 RZ/G2L 上用 Ubuntu 运行 LVGL


