Windows XP has been discontinued and unsupported both by Microsoft and The Qt Company for a long time now. However, in 2018 its install base is still significant, at around 6% of all desktop PC machines. Chances are your customers will require that your product runs on Windows XP, too.
If you are in this predicament, you have several options:
- Go with MSVC 2017 and use Windows XP targetting. You’ll need to compile Qt SDK on your own, which might be an issue: Qt 4 does not officially support newer MSVC compilers and Qt 5 is dropping Windows XP support.
- Go with VC 2010, Windows 7.1A SDK and Qt 4.8.x which is the last pre-built SDK that supports this platform. You’ll be stuck with Qt 4, but hey, you are already stuck with Windows XP to begin with.
- Go with MinGW. You could even build on Linux and cross-compile to Windows.
In hindsight, probably the MinGW way would be the easiest, but when targeting Windows, I prefer the native MS compilers, so I chose to go with option #2.
- Get a Windows 7/8/10 machine, ideally separate machine or a VM, so you potentially don’t mess up your workstation.
- Download and install Windows 7 SDK, which contains the VC 2010 compilers. If you get errors from the SDK installer, see this and this. Uninstalling VC 2010 Redistributable before installing the SDK should fix this.
- Download and install Update for the MSVC 2010 compilers, because due to a bug in the MS SDK installer they are not installed if you are on a Windows 10 machine. This will get you the compilers in a standalone installer that should work.
- Download and install the latest Qt 4 SDK release for VS 2010.
If everything installed properly, even with the mentioned issues, you should have a working build environment that is capable of targeting Windows XP. Now let’s build something:
%QTDIR%\bin\qtvars.bat "C:\Program Files\Microsoft SDKs\Windows\v7.1\bin\SetEnv.cmd" /x86 /xp /release qmake <source_dir>/project.pro nmake
Hopefully the build went OK and you can deploy to your Windows XP customers. In my case however, the build ended up in error – the compiler failed to find several includes: ammintrin.h, inttypes.h and stdint.h. I fixed this by simply “stealing” these files from another installation of VS2012 and copied them over to the VS2010 install dir: to c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\.