Distributing a GTK App for Windows
| ~2 minute read
Setting up msys2
Installation using chocolatey
You need to install msys2 before you can start developing on windows. The easiest way to set it up is to use the chocolatey package manager.
If you don't already have choco installed, just follow the installation instructions on https://chocolatey.org/install then run
choco install msys2
After msys2 is set up, open a new (non-administrator) powershell window, and in that run msys2
Installing necessary packages
sudo pacman -S mingw-w64-x86_64-gtk3 mingw-w64-x86_64-toolchain base-devel glib2-devel
Refer to the installation instructions on GTK's website on which other packages you might need. I believe this is enough to get started.
Compiling your app
Now, clone your project's repository and build the app as you normally would on linux and place the executable in the bin
directory inside your installation directory. Use the ldd command (ldd bin/MyApp.exe
) to list the necessary DLLs required
by your app and copy all the DLLs starting with "/mingw"
to the bin
directory. This script automatically does that:
ldd bin/MyApp.exe | grep '\/mingw.*\.dll' -o | xargs -I{} cp "{}" ./bin
Credit goes to https://stackoverflow.com/a/50130668; Replace MyApp.exe with your executable's name.
Adding other required files
Icon Theme
Create a directory for the icon theme with mkdir -p ./share/icons
, and download the hicolor (mandatory) and another icon pack (I'll be using Adwaita)
and place both files into share/icons
.
Or just copy from your mingw installation
cp /mingw64/share/icons/* -r share/icons/
GLib Schemas
Settings schemas need to be compiled in order for the app to work. The quickest way is to just copy the default ones from your mingw installation. In a real-world scenaro you might want to edit these files and delete any irrelevant settings but just for testing I don't care.
mkdir -p share/glib-2.0/schemas
cp /mingw64/share/glib-2.0/schemas/* share/glib-2.0/schemas/
glib-compile-schemas.exe share/glib-2.0/schemas/
Pixbuf loaders
GTK needs Pixbuf loaders to be able to load images, else it will crash. Just copy the loaders from your mingw installation:
cp /mingw64/lib/gdk-pixbuf-2.0 -r lib/gdk-pixbuf-2.0
Finishing up
Check that your app runs, and either zip the file or create a microsoft installer to distribute the app!