manpagez: man pages & more
html files: gtk2
Home | html | info | man

Compiling GTK+ Applications

Compiling 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+-2.0
 -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pango-1.0 -I/usr/X11R6/include -I/usr/include/freetype2 -I/usr/include/atk-1.0  
$ pkg-config --libs gtk+-2.0
 -L/usr/lib -L/usr/X11R6/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -lXi -lgdk_pixbuf-2.0 -lm -lpangox -lpangoxft -lXft -lXrender -lXext -lX11 -lfreetype -lpango -latk -lgobject-2.0 -lgmodule-2.0 -ldl -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+-2.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.

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.

The next major version, GTK+ 3, will remove many implementation details and struct members from its public headers. To ensure that your application will not have problems with this, you can define the preprocessor symbol GSEAL_ENABLE. This will make the compiler catch all uses of direct access to struct fields so that you can go through them one by one and replace them with a call to an accessor function instead.

© 2000-2018
Individual documents may contain additional copyright information.