Pour la plupart des gens, Windows XP est mort et enterré. Pourtant, comme l'a déjà mentionné, il existe encore des machines sous XP, et comme nous nous faisons un point d'honneur de supporter les anciens systèmes d'exploitation aussi longtemps que c'est raisonnablement possible, nous nous sommes prêté à l'exercice de vérifier si notre librairie C++ pouvait toujours être recompilée pour fonctionner sur un OS qui n'est plus supporté depuis plus de 10 ans. Comme nous allons le voir, c'est possible, mais il a plusieurs pièges à éviter..
Pour cet article, nous allons compiler l'exemple de Doc-Inventory de la librairie C++ pour qu'il puisse s'exécuter sur une vieille machine Windows XP 32 bits.
#include "yocto_api.h"
using namespace std;
int main(int argc, const char * argv[])
{
string errmsg;
// Setup the API to use local USB devices
if(YAPI::RegisterHub("usb", errmsg) != YAPI::SUCCESS) {
cerr << "RegisterHub error: " << errmsg << endl;
return 1;
}
cout << "Device list: " << endl;
YModule *module = YModule::FirstModule();
while (module != NULL) {
cout << module->get_serialNumber() << " ";
cout << module->get_productName() << endl;
module = module->nextModule();
}
YAPI::FreeAPI();
return 0;
}
Comme le code est très simple et accède uniquement au port USB, on a pensé qu'il suffirait de compiler un exécutable 32 bits et qu'il fonctionnerait directement sous Windows XP. En fait non. Windows XP ne reconnait pas l’exécutable et refuse tout simplement de le lancer.
Nous sommes parti du projet Visual Studio qui se situe dans le sous-répertoire Examples/Doc-Inventory de notre librairie de programmation C++, mais, si vous voulez partir d'une page blanche, nous avons un article dédié à ce sujet. Pour cet article, nous avons utilisé Visual Studio 2026, mais les étapes sont les mêmes avec les précédentes versions de Visual Studio.
Platform Toolset v141
La première étape consiste à s’assurer qu’on utilise bien la version v141 du Platform Toolset. Le Platform Toolset spécifie quelle version du compilateur Microsoft et des bibliothèques seront utilisées pour compiler le projet. En l'occurrence la v141 est la dernière version à supporter Windows XP.
Ce Toolset n'est pas installé par défaut. Pour l’ajouter, il faut utiliser " Visual Studio Installer", qui est installé en même temps que Visual Studio.
Dans Visual Studio Installer, il faut sélectionner "Desktop development with C++" et cocher la checkbox "MSVC v141" (ou "toolset v141" sur les anciennes versions de Visual Studio).
Une fois ce composant installé, on peut relancer Visual Studio 2026 et ouvrir notre projet.
Configurer le projet Visual Studio
Il faut maintenant configurer notre projet pour que l'exécutable puisse fonctionner sous Windows XP. Il faut donc prendre en compte les particularités suivantes:
- Windows XP fonctionne uniquement en 32 bits
- L'exécutable doit être compatible avec Windows XP (subsystem version=5.01)
- L’application ne doit pas faire appel à des bibliothèques dynamiques (DLL) qui n’existaient pas en 2014.
La première chose à faire est de s'assurer que la configuration courante du projet est bien réglée sur la plateforme x86 ou Win32.
Il faut ensuite accéder aux propriétés du projet (Menu -> Projet -> Propriétés du projet).

Les propriétés du projet
Dans la section "General", il faut sélectionner le Platform Toolset v141 que l'on a installé.
Il faut ensuite ajouter les définitions « NO_YSSL » et « _WIN32_WINNT=0x0501 » au préprocesseur C. Les paramètres du préprocesseur sont dans la section "C/C++" -> "Preprocesseur". Il faut éditer les définitions et ajouter ces deux valeurs.

Les définitions NO_YSSL et _WIN32_WINNT=0x0501
La définition _WIN32_WINNT=0x0501 limite l’accès aux APIs post-XP et force le compilateur à utiliser les APIs qui sont compatibles avec Windows XP.
La définition NO_YSSL désactive le support des connexions HTTPS dans notre librairie. C'est nécessaire car notre librairie utilise une API de cryptographie qui n'existait pas sous Windows XP.
Toujours dans la section "C/C++" il faut changer le paramètre Runtime Library pour qu'il inclue directement la bibliothèque standard (CRT) dans l'exécutable.

Il faut inclure la bibliothèque standard dans l'exécutable
Enfin, il faut forcer le linker a générer un exécutable qui soit prévu pour Windows XP. Dans la section "Linker" -> "System", il faut configurer le champ Minimum Required Version à 5.01 qui correspond à Windows XP.

Il faut forcer le subsystem à 5.01
Une fois ces modifications effectuées, on peut compiler le projet, copier l'exécutable et il devrait fonctionner sous Windows XP.

L'application sous Windows XP
Compiler sur des vieilles machines
Nous venons de vous expliquer comment compiler une application pour Windows XP depuis une machine moderne sous Windows 11/10, mais il est aussi possible d'utiliser notre librairie C++ dans les IDE de l'époque (par exemple : Visual Studio 2010).
Dans ce cas, la solution est encore plus simple, car votre compilateur va naturellement générer un exécutable prévu pour Windows XP. Il faut juste ajouter la définition NO_YSSL au préprocesseur pour désactiver le support HTTPS.
Votre code aussi
Pour cet exemple, le code de l'application est très simple, il ne fait qu'afficher les valeurs retournées par notre librairie, mais, si vous devez écrire quelque chose de plus complexe, il faut faire attention d'utiliser des APIs qui existaient déjà en 2014. Si vous voulez plus de détails sur ces limitations, vous pouvez consulter la documentation de Microsoft.
Conclusion
On se doute bien que parler de support Windows XP à l'aube de 2026 peut faire sourire. La plupart des gens estimeront que ces machines sont des failles de sécurité et qu'il faut s'en débarrasser au plus vite. Mais il reste encore des cas où il n'est pas facile, voire impossible, de mettre à jour l'OS. C’est le cas de certains équipements industriels ou simulateurs qui sont contrôlés par une application qui ne fonctionne que sous Windows XP.
C'est pour ces raisons que nous essayons de maintenir le plus possible la compatibilité ascendante.
