web-dev-qa-db-fra.com

Utilisez Visual Studio 2012 et compilez-vous avec les outils plus anciens de la plateforme?

Le problème

J'utilise Visual Studio 2012 pour développer des DLL C++. Sur certaines machines, ces DLL ne peuvent pas être chargées, car le jeu d’outils de la plate-forme, défini sur "v110", est manquant.

J'ai essayé d'installer d'anciens runtimes c ++. Ils n'ont pas été installés car "une nouvelle version est déjà installée". J'ai également installé le SDK Windows actuel, mais il n'y a toujours pas d'autre élément à choisir que v110.

Question

Comment puis-je compiler mon C++ DLL avec une version plus ancienne du moteur d'exécution C++ afin qu'il s'exécute sur des ordinateurs non-développeurs?

Platform toolset is v110

30
bytecode77

Selon cette page sur MSDN , vous devez disposer de la version correspondante de Visual Studio (2008 ou 2010) ou du SDK Windows correspondant à la liste déroulante "Plate-forme d'outils" pour répertorier ces versions:

Pour modifier le jeu d'outils de la plate-forme cible, vous devez disposer de la version associée de Visual Studio ou du Kit de développement logiciel de la plate-forme Windows. 

Vous semblez aussi être un peu confus entre "Platform Toolset", qui contrôle quel compilateur/éditeur de liens/etc. est utilisé pour construire votre application et "Visual C++ Redistributable", nécessaire pour exécuter votre application. Vous ne pouvez pas installer un "Platform Toolset" sur le PC d'un utilisateur, et vous ne le rendrez pas disponible en installant un "Visual C++ Redistributable" particulier sur votre PC de développement.

En outre, pour autant que je sache, Visual C++ Redistributable n'inclut pas les environnements d'exécution MFC. Ils sont disponibles en tant que module de fusion MSI (MSM) distinct.

23
Roger Lipscombe

J'aimerais partager certaines informations que j'ai découvertes et expliquées comment les utiliser pour mon but.

Apparemment, c'est une bonne option d'utiliser des liens statiques. Cela n'a pas toujours fonctionné pour moi, mais pour un projet plus petit, cela fonctionne assez bien. Et le résultat est un DLL sans aucune dépendance autre que kernel32.dll et similaire.

Utilisez simplement /MT pour la configuration de la version et /MTd pour le débogage et tout ira bien.

Le problème ici est qu'un développeur comme moi obtient la version actuelle de Visual Studio, peu de temps après sa publication, mais vous ne pouvez pas vous attendre à ce que les utilisateurs ordinaires aient des programmes d'exécution installés datant de quelques semaines seulement. Et installer différentes versions de Visual Studio uniquement pour utiliser l'ancien environnement d'exécution n'est certainement pas ce que vous voulez.

Static linking in Visual Studio 2013

7
bytecode77

Un indice pour l'archive Internet. (Je ne peux pas commenter les affirmations ci-dessus, je ne sais pas pourquoi)

Pour utiliser le jeu d’outils de la plate-forme v90 (= Visual Studio 2008) dans un Visual Studio plus récent (testet 2013 et 2015), vous devez installer Visual Studio 2008 et Visual Studio 2010, car Les dossiers des programmes de construction font partie de Visual Studio 2010. 

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\x64\PlatformToolsets pour v90 et v100

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0

pour V110 V120 et V140

représentant les versions de Visual Studio: v90 = 2008, v100 = 2010, V110 = 2012, V120 = 2013, V140 = 2015.

Après l'installation vob VS2010, les versions les plus récentes de Visual Studio 2013 et 2015 pourraient utiliser les jeux d'outils de la plate-forme vs90 et vs100. (Cela fonctionne immédiatement sans nouvelle installation de Visual Studio 2013/2015.) Je suppose que Visual Studio 2012 le fait de la même manière que VS2013 et VS2015.

2
bernie3280109

cela dépend de ce que vous essayez de construire. Certaines choses sont peut-être supportées via l’installation de Windows SDK 7.1. voir cet article, même question , .__, mais si votre projet dépend du MFC, il semble malheureusement que ce n’est pas possible du tout, principalement parce que rien, à part VS2010, ne déploie les bibliothèques MFC.

1
4pie0