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 | |||
GTK+ | 2.16.6 (old. but in some respects more stable) | |||
GTK+ | 2.18.5 (current maintained branch) | |||
Pango | 1.26.1 | |||
ATK | 1.28.0 | |||
cairo | 1.8.8 |
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 | ||||
win_iconv | 20090213 | ||||
GNU libiconv | 1.9.1 | ||||
win_iconv DLL | 20090213 | ||||
gettext-runtime | 0.17 | ||||
libpng | 1.2.40 | - | |||
libjpeg | 7 | - | |||
libtiff | 3.9.1 | - | |||
pkg-config | 0.23-3 | ||||
Freetype | 2.3.11 | ||||
Fontconfig | 2.8.0 | ||||
expat | 2.0.1 | - | |||
dirent | - | - | - | ||
proxy-libintl | 20080918 |
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.