- Machine Windows 7
- QtCreator 4.8.0
- Qt 5.12.0
- MSVC2015 64 bits
- Compilateur MSVC C ++ 14.0 (x86_amd64)
J'essaie de créer un programme très simple que j'aimerais partager avec mes collègues. Qt n'est pas installé sur eux et doit avoir un exécutable. J'ai échoué car l'exé avait de nombreuses dépendances que je n'ai pas pu trouver.
Pour déboguer le problème, je suis parti de zéro avec une application Qt Widgets qui ne fait rien(c'est-à-dire juste le fichier d'en-tête, main.cpp et mainWindow.cpp). Lorsque j'exécute le programme dans QtCreator, il se construit correctement et se termine avec le code 0. Un fichier exécutable est créé et en exécutant windeployqt, toutes les dll Qt requises sont copiées dans le répertoire. Cependant, les dll de Windows sont manquantes. En utilisant le gestionnaire de dépendances, je peux voir qu'il manque toute une liste de dll windows. Je ne comprends pas pourquoi tant de dll sont nécessaires pour un programme qui ne fait rien. Je suis en mesure de trouver certaines des dll dans le répertoire x64 \ ilc \ lib \ MSCRT \, mais la plupart des API-MS-WIN-CORE-xxx-xxx requises ne sont pas disponibles. J'ai lu des articles sur des sujets similaires, mais je ne pouvais pas relier les solutions proposées à ma situation. Tous les conseils sont appréciés, il s’agit d’un ordinateur portable professionnel. Par conséquent, la réinstallation de Windows n’est pas une option.
modifié lors de l'exécution de l'exécutable Qt .... (liens vers les captures d'écran ci-dessous) Premier message d'erreur
Deuxième message d'erreur, après avoir inclus VCRUNTIME140_APP.dll
API-MS-*
fichiers même si vous les avez sur le système. "Je ne comprends pas pourquoi tant de dll sont nécessaires pour un programme qui ne fait rien." - Votre programme ne nécessite pas réellement ces fichiers.Réponses:
Ces DLLs m'ont également causé des maux de tête à leur époque, alors j'en profite pour exposer ce mystère une fois pour toutes.
Les
API-MS-*
DLL ne manquent pas vraiment - le problème vient du gestionnaire de dépendances. Ces fausses DLL ont été ajoutées dans Windows Vista datant de 2007, tandis que le gestionnaire de dépendances date de 2006 et n'a jamais été mis à jour depuis.Nirsoft a analysé ces DLL et a montré qu’elles sont très petites et qu’elles ne contiennent en principe aucun code utile. Lorsque Windows les charge, leurs entrées d'importation sont remplacées par des appels à des fonctions réelles du noyau Windows.
L'article Sur API-MS-WIN-XXXXX.DLL et d'autres dépendances, Walker Glitches les appelle sous le nom de "Ensembles Api" et donne cette perspective historique:
Une version plus moderne du gestionnaire de dépendances, également gratuite, peut être trouvée dans Github Dependencies et permet de mieux démasquer les DLL suivantes:
la source