Requirements

Packages

You will need to get the GLib, cairo, Pango, ATK, and GTK+ developer packages to build against GTK+. To run GTK+ programs you will also need the fontconfig, freetype, expat, libpng and zlib packagages, and if your code uses gettext for internationalisation and/or you want GTK+ internalisation, the gettext-runtime package.

The packages here are for people who develop software that uses GTK+. This page is not intended directly for end-users. It is expected that people who build installers for GTK+ applications for Windows bundle GTK+ with them.

These packages are not for developing or running programs that use the Cygwin Unix emulation environment. Cygwin has GTK+ packages available directly in its installer which you should use. Note that the Cygwin GTK+ uses the X11 backend, so you will need to also run an X11 server then when you run GTK+ programs on Cygwin, but presumably that is what Cygwin users want.

You are welcome to redistribute GTK+ binaries, including applications that bundle them, on other web sites, CD-ROM, and other media. You don't have to ask for permission. That's one of the points of Free Software. One important thing that the GNU licenses require is that you must also redistribute the source code. This usually means at least the gettext, GLib, GTK+, Pango and Atk sources.

What toolchain to use?

The most natural toolchain to use together with these packages would probably be the GNU compiler and other utilities. When targeting Windows, that combination is known as MinGW Using Cygwin tools to build non-Cygwin Windows binaries is not recommended unless you are very careful and look out for mixups.

It is possible to use these packages also with Microsoft's compiler. However, the DLLs use the msvcrt.dll runtime library. This means that also applications that use the DLLs should preferrably use the msvcrt.dll runtime. Specifically, this means that you should not use newer versions of the Microsoft compiler than Visual C++ 6 without knowing exactly what you are doing.

Which Windows versions?

The current GTK+ stack uses APIs that are available only on Windows 2000 or later. Long obsolete versions of GTK+ did run on Win9x and NT 4, too.

Stable Release

There are 3 types of download options below. Binaries provide only the DLLs and other files used you will need to run your GTK+-using application. Dev packages provide include files, import libraries, documentation and additional tools. Source packages provide the source code for the component in question.

If you want to repackage the necessary runtime files together with your application into an installer, you can choose to leave out for instance message catalogs for languages that your application isn't localised to anyway.

All-in-one bundles

If you find choosing, downloading and unpacking the individual zip archives below a chore, there are all-in-one bundles of the GTK+ stack including 3rd-party dependencies, both of GTK+ 2.16 and 2.18. The bundles contain both binaries and a lot of developer files, many of which are relatively irrelevant. If you intend to redistribute the GTK+ run-time, you need to figure out which files you can leave out yourself. A new bundle will ideally be provided here whenever one of the member packages has been updated.

GTK+ individual packages

Package Version Downloads
GLib 2.22.3 Binaries Dev Sources
GTK+ 2.16.6 (old. but in some respects more stable) Binaries Dev Sources
GTK+ 2.18.5 (current maintained branch) Binaries Dev Sources
Pango 1.26.1 Binaries Dev Sources
ATK 1.28.0 Binaries Dev Sources
cairo 1.8.8 Binaries Dev Sources

Third Party Dependencies

You won't need all of these packages to just use GTK+ Some of the optional packages are needed for building applications like GIMP on Windows. Required packages are illustrated with .

Package Version Downloads  
zlib 1.2.3 Binaries & Dev
win_iconv 20090213 Dev & Sources
GNU libiconv 1.9.1 Binaries & Dev Sources
win_iconv DLL 20090213 Binaries & sources
gettext-runtime 0.17 Binaries Dev Sources
libpng 1.2.40 Binaries Dev -
libjpeg 7 Binaries Dev -
libtiff 3.9.1 Binaries Dev -
pkg-config 0.23-3 Tool Dev Sources
Freetype 2.3.11 Binaries Dev Sources
Fontconfig 2.8.0 Binaries Dev Sources
expat 2.0.1 Binaries Dev -
dirent - - Dev -
proxy-libintl 20080918 Binaries & sources

About libpng

This is an image file format library used by GTK+, and required.

The libpng package linked to above provides libpng12-0.dll. This package is built by me (Tor Lillqvist). Previously the GTK+ stack was built against the gnuwin32 build of libpng. Confusingly, gnuwin32's older builds of libpng provided libpng13.dll, and their newer builds provided libpng12.dll. I don't know whether these builds actually are binary compatible even if the DLL name was different. To be safe, never rename DLLs.

About zlib

This is the compression library used by libpng and libtiff, and thus also required.

About win_iconv

win_iconv is an implementation of iconv for Windows by Yukihiro Nakadaira that has a much smaller footprint than GNU libiconv. The win_iconv package above includes the header file, static archive library and the source file. This library is linked statically into GLib and thus not needed separately at run-time.

About iconv.dll

GLib 2.12.4 and earlier link to iconv in a separate DLL, iconv.dll. This can either be the GNU libiconv iconv.dll, or the identically named win_iconv_dll one which obviosuly is intented to be a drop-in replacement.

About gettext

The GNU internationalization library. All of the GTK+ stack uses it, but through proxy-libintl (see below) so it is actually optional at run-time.

About libjpeg and libtiff

These libraries are used by the gdk-pixbuf library in GTK+, and for instance by GIMP.

About pkg-config

This program is useful for Makefiles and configure scripts and extensively used in building software according to the GTK+ and GNOME conventions using autotools. It uses a database specifying inter-dependencies among software packages. It is used to get the compile and link flags needed when building software using libraries that provide pkg-config data. It requires GLib.

About freetype and fontconfig

These libraries are used by cairo and by Pango, so they are required. They provide an alternative font backend. In a normal GTK+ application on Windows their functionality won't actually be used, though. GIMP is an exception, GIMP's text tool uses freetype and fontconfig APIs.

About libexpat

This is a library required by fontconfig.

About dirent

This is the public domain implementation of dirent.h from MinGW. It is needed by Microsoft Visual C++ users that want to compile GLib. Not directly related to GLib.

About proxy-libintl

proxy-libintl is a very small static library. It acts as a proxy for the intl.dll from gettext-runtime, loading it dynamically, and failing gracefully. Fallback dummy functions are used if intl.dll isn't found. It is a static archive and the intent is to start linking this into the binaries in the GTK+ stack instead of referring directly to intl.dll. This enables application packagers to leave out the gettext-runtime binaries if they don't need or want to support i18n, without having to build own versions that don't use intl.dll.

When building DLLs against the proxy-libintl static library and using the GNU linker's auto-export feature (i.e. not using a .def file, and not using __declspec(dllexport)), it is a good idea to pass -Wl,--exclude-libs=libintl.a so that the libintl functions don't get exported from your DLL.