Ubuntu20.04LTS(amd64) 下安装 GTK4
首先
root@ubuntu: apt-get update
基础运行库安装
root@ubuntu: sudo apt-get install build-essential
root@ubuntu: sudo apt-get install libglib2.0-dev
root@ubuntu: sudo apt-get install cmake
root@ubuntu: sudo apt-get install libffi-dev
root@ubuntu: sudo apt-get install sassc
root@ubuntu: sudo apt-get install xsltproc
root@ubuntu: sudo apt-get install graphene-1.0
root@ubuntu: sudo apt-get install pixman-dev
root@ubuntu: sudo apt-get install python3-pip
root@ubuntu: sudo apt-get install flex
root@ubuntu: sudo apt-get install bison
root@ubuntu: sudo apt-get install ninja-build
root@ubuntu: sudo apt-get install git
root@ubuntu: sudo apt-get install libharfbuzz-dev
root@ubuntu: sudo apt-get install libfontconfig-dev
root@ubuntu: sudo apt-get install libxkbcommon-dev
root@ubuntu: sudo apt-get install libcairo-dev
root@ubuntu: sudo apt-get install libwayland-dev
root@ubuntu: sudo apt-get install libxrandr-dev
root@ubuntu: sudo apt-get install libxi-dev
root@ubuntu: sudo apt-get install libegl-dev
下面这几个库需要手动安装
- 安装meson ( 必须保证版本大于等于0.56.2)
NOTE:通过apt安装的meson版本不一定大于0.56.2,使用下述命令检查meson版本
root@ubuntu: meson -v
meson下载地址
下载meson-0.56.2.tar.gz
root@ubuntu: tar -xvJf meson-0.56.2.tar.gz
root@ubuntu: cd meson-0.56.2
root@ubuntu: cd meson-0.56.2
root@ubuntu: pip3 install ./
root@ubuntu: meson -v #如果是0.56.2表示安装成功
- 安装gobject-introspection
gobject-introspection下载地址
下载gobject-introspection-1.66.1.tar.xz
root@ubuntu: tar -xvJf gobject-introspection-1.66.1.tar.xz
root@ubuntu: cd gobject-introspection-1.66.1
root@ubuntu: meson _build
root@ubuntu: cd _build
root@ubuntu: ninja
root@ubuntu: ninja install
- 安装pango
pango下载地址
下载pango-1.48.0.tar.xz
root@ubuntu: apt-get install libx11-dev libxext-dev libxtst-dev libxrender-dev libxmu-dev libxmuu-dev
root@ubuntu: tar -xvJf pango-1.48.0.tar.xz
root@ubuntu: cd pango-1.48.0
root@ubuntu: meson _build
root@ubuntu: cd _build
root@ubuntu: ninja
root@ubuntu: ninja install
- 安装gdk-pixbuf
gdk-pixbuf下载地址
下载gdk-pixbuf-2.42.2.tar.xz
root@ubuntu: apt-get install docbook-xsl
root@ubuntu: tar -xvJf gdk-pixbuf-2.42.2.tar.xz
root@ubuntu: cd gdk-pixbuf-2.42.2
root@ubuntu: meson _build
root@ubuntu: cd _build
root@ubuntu: ninja
root@ubuntu: ninja install
- 安装wayland-protocols(版本必须大于1.20)
wayland-protocols下载地址
下载wayland-protocols-1.20.tar.xz
root@ubuntu: tar -xvJf wayland-protocols-1.20.tar.xz
root@ubuntu: cd gwayland-protocols-1.20
root@ubuntu: ./configure
root@ubuntu: make
root@ubuntu: make install
下载GTK4并安装
gtk4下载地址
下载 gtk-4.0.1.tar.xz
root@ubuntu: tar -xvJf gtk-4.0.1.tar.xz
root@ubuntu: cd gtk-4.0.1
root@ubuntu: meson _build
root@ubuntu: cd _build
root@ubuntu: ninja
root@ubuntu: ninja install
NOTE:在ninja过程中可能会出现缺某些库的情况(这是难免的),常见的error见下面常见err1的描述,通用解决方法就是运行下面命令安装库(如果无法安装在评论中贴出error mesgs)
root@ubuntu:sudo apt-get install libXXX-dev
安装完缺少的库之后,可以继续在_build中运行ninja命令,如果显示undefined的错误,则重新配置项目再安装(命令行见下面的常见err2)
常见err1
PS:如果出现这个,说明需要安装 libharfbuzz-dev
|Subproject harfbuzz is buildable: NO (disabling)
|Dependency harfbuzz from subproject subprojects/harfbuzz found: NO (subproject failed to configure)
|WARNING: The version of CMake /usr/bin/cmake is 2.8.12.2 but version >=3.4 is required
|Run-time dependency harfbuzz found: NO (tried pkgconfig and cmake)
|Looking for a fallback subproject for the dependency harfbuzz
subprojects/pango/meson.build:264:2: ERROR: Subproject "subprojects/harfbuzz" required but not found.
常见err2
如果ninja过程中出现undefined之类的错误可以重新配置项目再编译,例如(假设当前在gtk4的_build目录中):
重新配置项目并安装
root@ubuntu: cd .. #退出_build目录
root@ubuntu: meson setup --wipe _build
root@ubuntu: cd _build
root@ubuntu: ninja
root@ubuntu: ninja install
查看GTK4是否安装成功,显示下面的信息表示安装成功
pkg-config --cflags gtk4
-mfpmath=sse -msse -msse2 -pthread -I/usr/local/include/gtk-4.0 -I/usr/local/include/gio-unix-2.0 -I/usr/local/include/pango-1.0 -I/usr/local/include/fribidi -I/usr/local/include/gdk-pixbuf-2.0 -I/usr/local/include/graphene-1.0 -I/usr/local/lib/x86_64-linux-gnu/graphene-1.0/include -I/usr/local/include -I/usr/local/include/glib-2.0 -I/usr/local/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/cairo -I/usr/include/harfbuzz -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/libmount -I/usr/include/blkid
GTK4测试程序
File: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`