Compiling GTK+ Applications3GTK LibraryCompiling GTK+ Applications
How to compile your GTK+ application
Compiling GTK+ Applications on UNIX
To compile a GTK+ application, you need to tell the compiler where to
find the GTK+ header files and libraries. This is done with the
pkg-config utility.
The following interactive shell session demonstrates how
pkg-config is used (the actual output on
your system may be different):
$ pkg-config --cflags gtk+-3.0
-pthread -I/usr/include/gtk-3.0 -I/usr/lib64/gtk-3.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12
$ pkg-config --libs gtk+-3.0
-pthread -lgtk-x11-3.0 -lgdk-x11-3.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lgdk_pixbuf-3.0 -lpangocairo-1.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0
The simplest way to compile a program is to use the "backticks"
feature of the shell. If you enclose a command in backticks
(not single quotes), then its output will be
substituted into the command line before execution. So to compile
a GTK+ Hello, World, you would type the following:
$ cc `pkg-config --cflags --libs gtk+-3.0` hello.c -o hello
If you want to make sure that your program doesn't use any deprecated
functions, you can define the preprocessor symbol GTK_DISABLE_DEPRECATED
by using the command line option -DGTK_DISABLE_DEPRECATED=1.
There are similar symbols GDK_DISABLE_DEPRECATED,
GDK_PIXBUF_DISABLE_DEPRECATED and G_DISABLE_DEPRECATED for GDK, GdkPixbuf and
GLib.
If you want to make sure that your program doesn't use any functions which
may be problematic in a multihead setting, you can define the preprocessor
symbol GDK_MULTIHEAD_SAFE by using the command line option
-DGTK_MULTIHEAD_SAFE=1.
Similarly, if you want to make sure that your program doesn't use any
functions which may be problematic in a multidevice setting, you can
define the preprocessor symbol GDK_MULTIDEVICE_SAFE by using the command
line option -DGTK_MULTIDEVICE_SAFE=1.
The recommended way of using GTK+ has always been to only include the
toplevel headers gtk.h, gdk.h,
gdk-pixbuf.h.
If you want to make sure that your program follows this recommended
practise, you can define the preprocessor symbols GTK_DISABLE_SINGLE_INCLUDES
and GDK_PIXBUF_DISABLE_SINGLE_INCLUDES to make GTK+ generate an error
when individual headers are directly included.
There are some exceptions: gdkkeysyms.h is not included in
gdk.h because the file is quite large; see
Key Values documentation.
gdkx.h must be included independently because It's
platform-specific; see
X Window System Interaction
documentation.
The same for gtkunixprint.h if you use the non-portable
GtkPrintUnixDialog API.