Ubuntu下GTK+的下载与安装
准备材料:
- Ubuntu 20.04 LTS(任意Debian系发行版即可)
- GCC
步骤:
- 安装
使用
sudo apt install libgtk-3-dev
进行安装。
使用
pkg-config --list-all | grep gtk
检测是否已经安装
得到如下结果:
gtk+-broadway-3.0 GTK+ - GTK+ Graphical UI Library
gtk+-x11-3.0 GTK+ - GTK+ Graphical UI Library
gtk+-3.0 GTK+ - GTK+ Graphical UI Library
gtk+-unix-print-3.0 GTK+ - GTK+ Unix print support
gtk+-wayland-3.0 GTK+ - GTK+ Graphical UI Library
运行如下程序,进行尝试
#include <gtk/gtk.h>
int main(int argc, char *argv[])
{
GtkWidget *window;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_show(window);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_main();
return 0;
}
使用如下命令进行编译:
gcc -o test test.c
报错:
test.c:1:14: fatal error: gtk/gtk.h: No such file or directory
1 | #include <gtk/gtk.h>
| ^~~~~~~~~~~
compilation terminated.
缺少gtk的库
但是我们已经安装了gtk
推测是没有进行链接
使用如下命令查找gtk库的位置:
pkg-config --cflags --libs gtk+-3.0
得到以下一大串信息
-pthread -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0
编译的时候加上这句话:
gcc -o test test.c -pthread -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0
成功编译
可以运行
为了方便使用,写如下的makefile:
test: test.o
gcc -o test test.o \
-pthread \
-lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -latk-1.0 \
-lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0
test.o: test.c
gcc -c test.c \
-I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 \
-I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 \
-I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 \
-I/usr/include/gio-unix-2.0 -I/usr/include/cairo -I/usr/include/pango-1.0 \
-I/usr/include/fribidi -I/usr/include/harfbuzz -I/usr/include/atk-1.0 \
-I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/uuid \
-I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/gdk-pixbuf-2.0 \
-I/usr/include/libmount -I/usr/include/blkid -I/usr/include/glib-2.0 \
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include
clean:
rm test test.o
执行命令:
$ make
gcc -c test.c \
-I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 \
-I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 \
-I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 \
-I/usr/include/gio-unix-2.0 -I/usr/include/cairo -I/usr/include/pango-1.0 \
-I/usr/include/fribidi -I/usr/include/harfbuzz -I/usr/include/atk-1.0 \
-I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/uuid \
-I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/gdk-pixbuf-2.0 \
-I/usr/include/libmount -I/usr/include/blkid -I/usr/include/glib-2.0 \
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include
gcc -o test test.o \
-pthread \
-lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -latk-1.0 \
-lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0
成功运行