2013-03-16 10 views
30

Utilizzare Visual Studio 2012 e compilare con il set di strumenti della piattaforma precedente?

Sto usando Visual Studio 2012 per sviluppare DLL C++. Su alcune macchine queste DLL non possono essere caricate, perché manca il set di strumenti della piattaforma, che è impostato su "v110".

Ho provato a installare i vecchi runtime del C++. Non sono stati installati perché "è già installata una versione più recente". Ho anche installato l'attuale SDK di Windows, ma non ci sono altri elementi tra cui scegliere rispetto alla v110.

Domanda

Come posso compilare il mio DLL C++ con una versione precedente del runtime C++ in modo che verrà eseguito su macchine non-sviluppatori?

Platform toolset is v110

+0

Avete provato a installare [Visual C++ Redistributable per VS 2012] (http://www.microsoft.com/en-us/download/details.aspx?id=30679) su quelle macchine non sviluppate e vedere se Funziona? –

+10

Sì, questo funziona. Ma invece di forzare gli utenti a installare runtime, preferirei utilizzare versioni precedenti di questi runtime, quindi la mia applicazione funzionerà sulla macchina di destinazione. Come posso selezionare una versione precedente di "Platform Toolset" nella finestra delle proprietà? – bytecode77

+1

è necessario installare il vecchio studio di visualizzazione –

risposta

23

Secondo this page on MSDN, è necessario avere la versione corrispondente di Visual Studio (2008 o 2010), o il relativo SDK di Windows per la "Piattaforma Toolset" cadere giù per elencare quelle versioni:

Per cambiare il set di strumenti della piattaforma di destinazione, è necessario che sia installata la versione associata di Visual Studio o di Windows Platform SDK.

Sembra anche essere un po 'confuso tra "Platform Toolset", che controlla quale compilatore/linker/etc. viene utilizzato per build l'applicazione e "Visual C++ Redistributable", che è necessario per eseguire l'applicazione. Non è possibile installare un "set di strumenti di piattaforma" sul PC dell'utente e non lo si renderà disponibile installando un particolare "ridistribuibile di Visual C++" sul PC di sviluppo.

Inoltre, per quanto ne so, Visual C++ Redistributable non include i runtime MFC. Sono disponibili come modulo di unione MSI separato (MSM).

+0

Ho installato Windows SDK, ma non riesco ancora a scegliere un runtime diverso. – bytecode77

+1

Quindi probabilmente sarà necessario installare Visual Studio 2008 o 2010, purtroppo ... –

1

bene dipende da cosa si sta cercando di costruire. Alcune cose possono essere supportate tramite l'installazione di Windows SDK 7.1. see this post, same question, ma se il progetto dipende da MFC, sfortunatamente sembra che non sia possibile, principalmente perché solo VS2010 sta distribuendo le librerie MFC.

+0

Come ho affermato, ho provato a installare Windows SDK, ma non ho ancora potuto scegliere versioni precedenti di runtime. Inoltre, non sto usando MFC. Questa DLL contiene solo una funzione e utilizza un paio di file di inclusione standard. – bytecode77

+0

leggi questo argomento, sono stati in grado di utilizzare il set di strumenti SDK7.1 in VS2012 ma ottengono errori durante la compilazione del codice – 4pie0

7

Mi piacerebbe condividere alcune informazioni, che ho trovato e capito come usarle per il mio scopo.

Apparentemente è una buona opzione per utilizzare il collegamento statico. Non ha sempre funzionato per me, ma per un mio progetto più piccolo, funziona abbastanza bene. E il risultato è una DLL senza dipendenze diverse da kernel32.dll e simili.

Basta usare /MT per la configurazione di rilascio e /MTd per il debug e starai bene.

Il problema qui è che uno sviluppatore come me ottiene la versione corrente di Visual Studio, poco dopo il suo rilascio, ma non si può davvero aspettarsi che gli utenti comuni abbiano installato runtime che hanno solo poche settimane. E installare diverse versioni di Visual Studio solo per usare il vecchio runtime non è sicuramente quello che vuoi.

Static linking in Visual Studio 2013

+3

Sfortunatamente, questa non è un'opzione se si utilizza il codice gestito (flag/clr). La compilazione produce questo messaggio: 'Errore riga di comando D8016: '/ clr' e '/ MT' opzioni della riga di comando sono incompatibili'. Ecco una discussione sul perché: http://www.windows-tech.info/17/5f0fd2024b850de5.php – Rast

1

Un suggerimento per l'archivio internet. (Non posso commentare le dichiarazioni di cui sopra, non so perché)

di utilizzare la piattaforma toolset v90 (= Visual Studio 2008) in una più recente di Visual Studio (I testet 2013 e 2015) è necessario installare visual Studio 2008 e visual Studio 2010 in aggiunta, perché le definizioni di set di strumenti di piattaforma VS90 nella SM Costruire cartella programmi sono parte von visual Studio 2010.

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

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

per V110 V120 e V140

che rappresentano versioni di Visual Studio: v90 = 2008, v100 = 2010, V110 = 2012, V120 = 2013, V140 = 2015.

Dopo l'installazione vob VS2010 le versioni più recenti di Visual Studio 2013 e 2015 potrebbero utilizzare i set di strumenti della piattaforma vs90 e vs100. (Funziona immidiadtly senza una nuova installazione di Visual Studio 2013/2015.) Immagino che Visual Studio 2012 lo stia facendo allo stesso modo di VS2013 e VS2015.

Problemi correlati