资讯详情

【定期更新】Ubuntu20.04LTS(amd64/x86_64) 下安装 GTK4(更新了4.6.2版本的安装)

📅 2026/10/17 9:18:25 | 华诺云谱 👁 阅读
【定期更新】Ubuntu20.04LTS(amd64/x86_64) 下安装 GTK4(更新了4.6.2版本的安装)
1. Ubuntu 20.04 LTS 源码编译 GTK4 4.6.2 到底难在哪Ubuntu 20.04 LTS 自带的 GTK 版本停留在 3.24官方源里根本没有 GTK4 的包想在 amd64/x86_64 机器上用上 GTK4 4.6.2只能走源码编译这条路。GTK4 是什么它是 GNOME 桌面栈的新一代图形工具包负责窗口、控件、渲染和输入事件适合做 Linux 原生 GUI 应用、嵌入式 HMI 面板以及需要 Wayland 支持的现代桌面程序。适合谁手里有一台 Ubuntu 20.04 的 x86_64 开发机、想跑 GTK4 demo 或者给自研应用升级 UI 框架的开发者。难点不在 GTK4 本身而在它的依赖链。GTK4 4.6.2 依赖 glib、pango、gdk-pixbuf、graphene、harfbuzz、wayland-protocols、libxcursor 等一长串库而 Ubuntu 20.04 仓库里的版本普遍偏低。比如 pango 需要 1.48 以上、wayland-protocols 必须大于 1.20、meson 必须大于等于 0.56.2这些条件 apt 直接装是满足不了的。所以整个流程是先把基础编译工具和依赖库补齐再手动编译几个版本不够的库最后才轮到 GTK4 本体。我试过在纯净的 Ubuntu 20.04 容器里从零走一遍第一次编译卡在 harfbuzz 找不到、第二次卡在 meson 版本太低、第三次卡在 ninja 报 undefined 符号。踩过的坑基本都集中在依赖版本和 pkg-config 路径上。这篇文章会把每一步的可复制命令、meson setup 参数、以及报错排查都写清楚目标是一次编译通过并跑通 GTK4 的 hello-world demo。另外构建脚本里会涉及一些环境变量和 Key 管理我会用 TaoToken 统一管理避免把敏感信息硬编码进脚本。2. 编译前的依赖链准备与 TaoToken 环境变量管理在动手编译 GTK4 4.6.2 之前先把基础工具链和一批能直接用 apt 装上的依赖库补齐。这一步不做后面 meson 配置会直接报一堆found: NO。以下命令在 root 或 sudo 下执行Ubuntu 20.04 amd64/x86_64 环境实测可用。sudo apt-get update sudo apt-get install -y build-essential python3-pip ninja-build cmake git sudo apt-get install -y libglib2.0 libglib2.0-dev libffi-dev sudo apt-get install -y libpng-dev libharfbuzz-dev libthai-dev sudo apt-get install -y libxkbcommon-dev libcairo-dev libxml2 libxml2-dev sudo apt-get install -y libwayland-dev libxrandr-dev libxi-dev libxdamage-dev libxinerama-dev sudo apt-get install -y libfontconfig-dev libegl-dev libx11-dev libxext-dev libxtst-dev libxrender-dev sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good sudo apt-get install -y sassc xsltproc flex bison docbook-xsl这里有几个包容易漏libffi-dev是 glib 编译时需要的libfontconfig-dev是 pango 需要的docbook-xsl是 gdk-pixbuf 生成文档时需要的。漏掉任何一个后面 ninja 阶段都会报错。接下来是 meson。Ubuntu 20.04 apt 里的 meson 版本低于 0.56.2不满足 GTK4 4.6.2 的要求必须手动装新版。我选 0.61.4实测稳定。wget https://github.com/mesonbuild/meson/releases/download/0.61.4/meson-0.61.4.tar.gz tar -xvf meson-0.61.4.tar.gz cd meson-0.61.4 pip3 install . meson -v如果meson -v输出 0.61.4 就说明装好了。如果提示找不到命令用 root 用户重装一遍省得配 PATH。然后是 xcursor。GTK4 编译时需要 libXcursorUbuntu 20.04 的版本偏旧手动编译一个 1.2.0wget https://www.x.org/releases/individual/lib/libXcursor-1.2.0.tar.gz tar -xvf libXcursor-1.2.0.tar.gz cd libXcursor-1.2.0 ./configure make sudo make install到这里构建脚本里会用到一些环境变量比如下载源地址、代理配置、以及后面可能接入的 API Key。我习惯用 TaoToken 统一管理这些 Key避免在脚本里硬编码。TaoToken 是一个统一 Key 管理平台你可以把不同服务的 Key 集中放在一处构建脚本通过环境变量读取。先在 TaoToken 控制台创建一个 Key然后写进 shell 配置export TAOTOKEN_API_KEYsk-你的key export TAOTOKEN_BASE_URLhttps://taotoken.net/api这样构建脚本里引用$TAOTOKEN_API_KEY就行换机器或者换 Key 只改一处。如果你后面要用脚本自动拉取依赖或者调用模型做构建日志分析这个 Key 就能直接复用。控制台地址在 https://taotoken.net/api-keys 接入文档在 https://taotoken.net/doc 。依赖链里还有几个必须手动编译的库gobject-introspection、pango、gdk-pixbuf、wayland-protocols。它们的编译方式统一是 meson ninja下面逐个给出命令。gobject-introspection 1.66.1wget https://download.gnome.org/sources/gobject-introspection/1.66/gobject-introspection-1.66.1.tar.xz tar -xvJf gobject-introspection-1.66.1.tar.xz cd gobject-introspection-1.66.1 meson _build cd _build sudo ninja sudo ninja installpango 1.48.0sudo apt-get install -y libxmu-dev libxmuu-dev wget https://download.gnome.org/sources/pango/1.48/pango-1.48.0.tar.xz tar -xvJf pango-1.48.0.tar.xz cd pango-1.48.0 meson _build cd _build sudo ninja sudo ninja installgdk-pixbuf 2.42.2wget https://download.gnome.org/sources/gdk-pixbuf/2.42/gdk-pixbuf-2.42.2.tar.xz tar -xvJf gdk-pixbuf-2.42.2.tar.xz cd gdk-pixbuf-2.42.2 meson _build cd _build sudo ninja sudo ninja installwayland-protocols 1.21版本必须大于 1.20wget https://gitlab.freedesktop.org/wayland/wayland-protocols/-/archive/1.21/wayland-protocols-1.21.tar.gz tar -xvf wayland-protocols-1.21.tar.gz cd wayland-protocols-1.21 meson _build cd _build sudo ninja sudo ninja install每装完一个库建议用pkg-config --modversion 库名确认版本比如pkg-config --modversion pango应该输出 1.48.0 以上。这一步是后面 GTK4 配置能否通过的关键。3. GTK4 4.6.2 的 meson setup 可复制配置与编译依赖链补齐后进入 GTK4 4.6.2 本体编译。先下载源码包wget https://download.gnome.org/sources/gtk/4.6/gtk-4.6.2.tar.xz tar -xvJf gtk-4.6.2.tar.xz cd gtk-4.6.2接下来是 meson setup。GTK4 4.6.2 的默认配置会尝试构建所有后端包括 Wayland、X11、Broadway、媒体后端等。如果你只是想在 X11 或 Wayland 下跑 demo可以关掉一些不必要的东西减少编译时间和报错概率。下面这份配置是我实测能一次通过的meson setup _build \ --prefix/usr/local \ --buildtyperelease \ -Dwayland-backendtrue \ -Dx11-backendtrue \ -Dbroadway-backendfalse \ -Dmedia-gstreamerdisabled \ -Dvulkandisabled \ -Dintrospectionenabled \ -Ddocumentationfalse \ -Ddemosfalse \ -Dtestsfalse \ -Dexamplesfalse参数说明用表格对照一下参数作用建议值--prefix安装路径/usr/local--buildtype编译类型release-Dwayland-backendWayland 后端true-Dx11-backendX11 后端true-Dbroadway-backend浏览器后端false-Dmedia-gstreamer媒体支持disabled-DvulkanVulkan 渲染disabled-DintrospectionGObject 内省enabled-Ddocumentation文档生成false-Ddemos示例程序false关掉media-gstreamer和vulkan能省掉大量依赖如果你确实需要视频播放或 Vulkan 渲染再单独打开。introspection建议保留否则后面用 Python 或 JS 绑定会缺文件。如果你想把这份配置固化下来方便脚本复用可以写一个settings.json放在项目根目录内容如下{ build_options: { prefix: /usr/local, buildtype: release, wayland-backend: true, x11-backend: true, broadway-backend: false, media-gstreamer: disabled, vulkan: disabled, introspection: enabled, documentation: false, demos: false, tests: false, examples: false }, env: { TAOTOKEN_BASE_URL: https://taotoken.net/api, TAOTOKEN_API_KEY: ${TAOTOKEN_API_KEY} } }这个文件不是 meson 原生读取的而是给你自己的构建脚本用的。脚本里读 JSON拼出 meson 命令同时把 TaoToken 的 Base URL 和 Key 注入环境变量。这样换机器时只改 JSON 里的 Key 引用不用动命令。配置完成后开始编译cd _build sudo ninja sudo ninja installninja阶段是耗时最长的amd64 机器上大概 10 到 20 分钟取决于 CPU 核数。如果中途报错先别急着删_build大部分情况是缺某个-dev包装上后继续ninja即可。只有出现 undefined 符号错误时才需要重新配置cd .. meson setup --wipe _build cd _build sudo ninja sudo ninja install--wipe会清空_build目录重新配置但不会重新下载源码比重头来快很多。编译完成后用 pkg-config 验证pkg-config --cflags gtk4 pkg-config --modversion gtk4如果输出一堆-I/usr/local/include/gtk-4.0之类的路径并且版本号显示 4.6.2说明安装成功。如果提示Package gtk4 was not found大概率是/usr/local/lib/x86_64-linux-gnu/pkgconfig没在PKG_CONFIG_PATH里执行export PKG_CONFIG_PATH/usr/local/lib/x86_64-linux-gnu/pkgconfig:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH再验证一次即可。4. 验证请求与 GTK4 demo 跑通结果安装成功后写一个最小的 GTK4 程序验证。新建hello-world-gtk.c#include gtk/gtk.h static void print_hello(GtkWidget *widget, gpointer data) { g_print(Hello World\n); } static void activate(GtkApplication *app, gpointer user_data) { GtkWidget *window; GtkWidget *button; window gtk_application_window_new(app); gtk_window_set_title(GTK_WINDOW(window), Window); gtk_window_set_default_size(GTK_WINDOW(window), 200, 200); button gtk_button_new_with_label(Hello World); g_signal_connect(button, clicked, G_CALLBACK(print_hello), NULL); gtk_window_set_child(GTK_WINDOW(window), button); gtk_window_present(GTK_WINDOW(window)); } int main(int argc, char **argv) { GtkApplication *app; int status; app gtk_application_new(org.gtk.example, G_APPLICATION_FLAGS_NONE); g_signal_connect(app, activate, G_CALLBACK(activate), NULL); status g_application_run(G_APPLICATION(app), argc, argv); g_object_unref(app); return status; }编译命令gcc -o hello-world-gtk hello-world-gtk.c pkg-config --cflags --libs gtk4如果编译没有报错运行./hello-world-gtk正常情况下会弹出一个 200x200 的窗口里面有一个 Hello World 按钮点击按钮终端会打印Hello World。这说明 GTK4 4.6.2 在 Ubuntu 20.04 amd64 上已经跑通了。如果你在无显示器的服务器上跑会报cannot open display这是正常的用xvfb-run ./hello-world-gtk可以模拟显示环境验证。除了本地 demo构建脚本里可能还需要调用一些远程服务做日志分析或依赖检查。这时候 TaoToken 的 Key 就派上用场了。你可以用 curl 测试一下 Key 是否可用curl -s https://taotoken.net/api/v1/models \ -H Authorization: Bearer $TAOTOKEN_API_KEY | head -c 200如果返回模型列表的 JSON说明 Key 配置正确。这个请求可以用来在构建脚本开头做一次连通性检查避免后面调用时才发现 Key 失效。模型对话入口在 https://taotoken.net/models 需要长期跑编码任务或 Agent 的可以用 Coding Plan地址是 https://taotoken.net/coding-plan 。验证阶段还有一个容易忽略的点ldconfig。手动ninja install后/usr/local/lib下的动态库不一定被系统缓存识别执行一次sudo ldconfig然后再跑 demo。如果之前报error while loading shared libraries: libgtk-4.so.1ldconfig基本能解决。5. 编译 GTK4 4.6.2 常见报错排查对照这一节把我在 Ubuntu 20.04 编译 GTK4 4.6.2 过程中真实遇到的报错和解决办法列出来对照着查能省不少时间。报错一Run-time dependency harfbuzz found: NO (tried pkgconfig and cmake)完整报错类似Subproject harfbuzz is buildable: NO (disabling) Dependency harfbuzz from subproject subprojects/harfbuzz found: NO Run-time dependency harfbuzz found: NO (tried pkgconfig and cmake) ERROR: Subproject subprojects/harfbuzz required but not found.原因系统里没有 harfbuzz 的开发包或者版本太低。解决sudo apt-get install -y libharfbuzz-dev pkg-config --modversion harfbuzz如果版本低于 2.0需要手动编译新版 harfbuzz。装完后重新meson setup --wipe _build。报错二The version of CMake /usr/bin/cmake is 2.8.12.2 but version 3.4 is required原因Ubuntu 20.04 自带的 cmake 版本太旧。解决sudo apt-get install -y cmake cmake --version如果 apt 装的还是旧版去 cmake 官网下载 3.20 以上的二进制包解压后把bin目录加到 PATH 前面。报错三ninja: error: undefined reference to xxx原因某个库编译时符号没链接上通常是依赖库版本不匹配或者_build缓存了旧配置。解决cd .. meson setup --wipe _build cd _build sudo ninja sudo ninja install--wipe会强制重新配置大部分 undefined 错误都能解决。报错四Package gtk4 was not found in the pkg-config search path原因/usr/local/lib/x86_64-linux-gnu/pkgconfig不在PKG_CONFIG_PATH里。解决export PKG_CONFIG_PATH/usr/local/lib/x86_64-linux-gnu/pkgconfig:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH pkg-config --modversion gtk4建议把这行写进~/.bashrc避免每次开新终端都要重新设置。报错五error while loading shared libraries: libgtk-4.so.1原因动态库路径没被系统识别。解决sudo ldconfig如果还不行检查/etc/ld.so.conf.d/下有没有包含/usr/local/lib的配置文件没有就新建一个echo /usr/local/lib | sudo tee /etc/ld.so.conf.d/local.conf sudo ldconfig报错六meson: command not found或版本低于 0.56.2原因apt 装的 meson 版本不够。解决按第 2 节的步骤手动装 meson 0.61.4用 root 用户执行pip3 install .然后meson -v确认。报错七Dependency wayland-protocols found: NO或版本低于 1.20原因wayland-protocols 版本不够。解决手动编译 1.21命令见第 2 节。装完后pkg-config --modversion wayland-protocols确认。报错八401 Unauthorized或local proxy failed如果你在构建脚本里调用了 TaoToken 的 API 做日志分析遇到 401 说明 Key 不对或没传。检查echo $TAOTOKEN_API_KEY curl -s https://taotoken.net/api/v1/models -H Authorization: Bearer $TAOTOKEN_API_KEY如果返回local proxy failed检查TAOTOKEN_BASE_URL是否写成了https://taotoken.net/api不要多加斜杠或路径。Key 管理入口在 https://taotoken.net/api-keys 接入文档在 https://taotoken.net/doc 。报错九reading choices相关错误这类错误通常出现在解析 API 返回时说明返回体不是预期的 JSON 结构。先用 curl 看原始返回curl -s https://taotoken.net/api/v1/models -H Authorization: Bearer $TAOTOKEN_API_KEY确认返回正常后再检查脚本里的解析逻辑。如果是 OAuth 相关报错检查 Key 是否过期重新在控制台生成一个。排查顺序建议先看 meson setup 阶段的found: NO把缺的-dev包装上再看 ninja 阶段的 undefined用--wipe重配最后看运行时的库加载问题用ldconfig解决。按这个顺序走基本不会卡太久。6. 构建脚本里的 Key 管理与长期维护建议GTK4 4.6.2 编译通过只是第一步后面你可能会把这套流程写成自动化脚本在 CI 或者多台机器上复用。这时候环境变量和 Key 的管理就很重要。我的做法是把所有可变配置抽到一个.env文件里脚本启动时 source 进来# .env TAOTOKEN_BASE_URLhttps://taotoken.net/api TAOTOKEN_API_KEYsk-你的key GTK_PREFIX/usr/local BUILD_TYPErelease脚本里这样用set -a source .env set a meson setup _build \ --prefix$GTK_PREFIX \ --buildtype$BUILD_TYPE \ -Dwayland-backendtrue \ -Dx11-backendtrue \ -Dmedia-gstreamerdisabled \ -Dvulkandisabled.env文件不要提交到 git加进.gitignore。团队协作时每个人用自己的 Key通过 TaoToken 控制台统一管理权限和额度都能单独控制。需要长期跑编码任务或者 Agent 的可以用 Coding Plan地址是 https://taotoken.net/coding-plan 比按量调用更划算。另外几个长期维护的建议。第一把编译好的 GTK4 库路径写进/etc/ld.so.conf.d/避免每次开新终端都要设PKG_CONFIG_PATH。第二如果 Ubuntu 20.04 后续升级了 glib 或 pango记得重新编译 GTK4因为 ABI 可能不兼容。第三保留_build目录的meson-logs/meson-log.txt出问题时这个日志比终端输出详细得多。第四如果要在多台 amd64 机器上部署可以把编译好的/usr/local目录打包用rsync同步过去省去重复编译的时间。最后一步验证整个链路是否闭环pkg-config --modversion gtk4 ./hello-world-gtk版本号显示 4.6.2窗口正常弹出按钮点击有输出就算完成了。如果后面要接入更多服务TaoToken 的模型对话入口在 https://taotoken.net/models API Key 管理在 https://taotoken.net/api-keys 文档在 https://taotoken.net/doc 按需取用即可。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑