Ubuntu20.04LTS(amd64) 下安装 GTK4

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

下面这几个库需要手动安装

  1. 安装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表示安装成功
  1. 安装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
  1. 安装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
  1. 安装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
  1. 安装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`

猜你喜欢

转载自blog.csdn.net/qq_31985307/article/details/112732369