Utilisez Visual Studio 2012 et compilez avec un ensemble d'outils de plate-forme plus ancien?

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 plate-forme, qui est défini sur "v110" est manquant.

J'ai essayé d'installer des runtimes c++ plus anciens. Ils n'ont pas installé car "une version plus récente est déjà installée". J'ai également installé le SDK Windows actuel, mais il n'y a toujours pas d'autres éléments à choisir que v110.

Question

Comment puis-je compiler mon c++ DLL avec une ancienne version du runtime C++ afin qu'il fonctionne sur des machines non-développeur?

Plate-forme toolset est v110

30
demandé sur bytecode77 2013-03-16 23:22:14

4 réponses

Selon cette page sur MSDN , vous devez avoir la version correspondante de Visual Studio (2008 ou 2010), ou le SDK Windows correspondant pour le menu déroulant "Platform Toolset" pour lister ces versions:

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

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

Aussi, pour autant que je sache, le redistribuable Visual C++ n'inclut pas les runtimes MFC. Ils sont disponibles en tant que module de fusion MSI séparé (MSM).

23
répondu Roger Lipscombe 2013-03-16 20:07:31

Je voudrais partager quelques informations, que je suis tombé sur et compris comment les utiliser pour mon but.

, Apparemment, c'est une bonne option pour utiliser la liaison statique. Ça n'a pas toujours marché pour moi, mais pour un petit projet, ça marche plutôt bien. Et le résultat est une DLL sans dépendances autres que kernel32.dll et similaires.

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 le version actuelle de Visual Studio, peu de temps après sa sortie, mais vous ne pouvez pas vraiment vous attendre à ce que les utilisateurs communs aient des runtimes installés qui ne datent que de quelques semaines. Et l'installation des différentes versions de Visual Studio pour utiliser l'ancien runtime n'est certainement pas ce que vous voulez.

Liaison statique dans Visual Studio 2013

7
répondu bytecode77 2013-11-05 07:42:12

un indice pour l'Internet archive. (Je ne peux pas commenter les déclarations ci-dessus, je ne sais pas pourquoi)

Pour utiliser le V90 platform toolset (=Visual Studio 2008) dans un Visual Studio Plus Récent (I testet 2013 et 2015), vous devez installer Visual Studio 2008 et Visual Studio 2010, car les définitions vs90 platform toolset dans le dossier ms Build programs 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 Visual Studio 2013 et 2015 plus récentes pourraient utiliser les ensembles d'outils de plate-forme vs90 et vs100. (Cela fonctionne immidiadtly sans une 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
répondu bernie3280109 2016-08-25 12:17:09

Eh bien, cela dépend de ce que vous essayez de construire. Certaines choses sont peut-être prises en charge via l'installation de Windows SDK 7.1. voir ce post, même question, mais si votre projet dépend de MFC, il semble malheureusement que ce n'est pas possible du tout, principalement parce que rien D'autre que VS2010 ne déploie les bibliothèques MFC.

1
répondu 4pie0 2017-05-23 12:16:44