Avertissement: Ceci est une solution de contournement , pas une solution à votre réponse, mais toujours, une possibilité très viable.
Si vous voulez être absolument sûr qu'il n'y a pas de dépendances de VS lui-même - mais il a ses propres inconvénients - dans les paramètres de génération de code, vous pouvez choisir d'aller avec Multi Threaded (MT) / Multi Threaded Debug (MD) (pour les versions de débogage ) au lieu de MT DLL (MTd) / MT Debug DLL (MDd).
Quels sont les inconvénients?
- Cela augmente votre taille exécutable et votre binaire (bien que si vous faites un jeu, cela est probablement négligeable)
- compilé de cette façon ne bénéficiera pas des mises à jour des DLL d'exécution. (par exemple, si Microsoft publie VC ++ 2015 SP2, SP3, SP4, etc.) Mais cela dépend de vous.
- Utilisation accrue de la RAM (également négligeable) car vous ne réutilisez pas le code existant / chargé (DLL)
- Vous devez vous assurer que toutes les bibliothèques que vous liez sont compilées avec le même runtime, sinon la liaison pourrait échouer, ou des erreurs d'exécution intéressantes pourraient se produire (probablement pas, mais cela m'est arrivé une fois dans une vie dans un projet hérité qui a été mis à jour vers le plus récent VS)
Et quels sont les avantages?
- votre exécutable n'aura pas de dépendances "externes" de VS lui-même (pas d'exigence msvc * .dll).
- certaines personnes voient cela comme une augmentation des performances car vous éliminez la surcharge des appels DLL, alors que cela est théoriquement vrai, les améliorations sont négligeables dans la pratique
Consultez ce lien pour une explication plus élaborée et pour les pièges et les chutes que vous pourriez rencontrer avec l'utilisation d'un runtime statique.
Une autre solution consiste à placer toutes les DLL requises à l'emplacement de votre fichier binaire. Votre application ne bénéficiera pas de mises à jour (des bibliothèques d'exécution) mais c'est tout.
La vraie solution consiste à distribuer l'application en mode dll de libération / non débogage (MTd) et à fournir le programme d'installation redistribuable VC ++ correct (et tout autre programme d'installation de bibliothèque que vous pourriez utiliser, par exemple OpenAL, DirectX9, PhysX) et à laisser l'utilisateur exécuter avant d'exécuter votre application (comme d'autres réponses l'ont souligné).
Assurez-vous également de faire savoir à l'utilisateur qu'il doit éventuellement mettre à jour ses pilotes GPU (car ceux-ci contiennent également plusieurs temps d'exécution pour de nombreuses applications, par exemple OpenGL, Vulcan).