wake-up-neo.net

Verwenden Sie Visual Studio 2012 und kompilieren Sie es mit einem älteren Plattform-Toolset.

Das Problem

Ich verwende Visual Studio 2012 zum Entwickeln von C++ - DLLs. Auf einigen Maschinen können diese DLLs nicht geladen werden, da das Plattform-Toolset, das auf "v110" gesetzt ist, fehlt.

Ich habe versucht, ältere C++ - Laufzeiten zu installieren. Sie haben nicht installiert, weil "eine neuere Version bereits installiert ist". Ich habe auch das aktuelle Windows SDK installiert, aber es gibt immer noch keine anderen Optionen als v110.

Frage

Wie kann ich mein C++ DLL mit einer älteren Version der C++ - Laufzeitumgebung kompilieren, damit es auf Nicht-Entwickler-Computern ausgeführt werden kann?

Platform toolset is v110

30
bytecode77

Gemäß dieser Seite in MSDN - benötigen Sie die entsprechende Version von Visual Studio (2008 oder 2010) oder das entsprechende Windows SDK für das Dropdown-Menü "Platform Toolset", um diese Versionen aufzulisten:

Um das Zielplattform-Toolset zu ändern, muss die zugehörige Version von Visual Studio oder das Windows Platform SDK installiert sein. 

Sie scheinen auch etwas verwirrt zu sein zwischen "Platform Toolset", das steuert, welcher Compiler/Linker/etc. wird für build Ihrer Anwendung und "Visual C++ Redistributable" verwendet, die zum Ausführen Ihrer Anwendung erforderlich ist. Sie können ein "Platform Toolset" nicht auf einem Benutzer-PC installieren, noch können Sie eines zur Verfügung stellen, indem Sie eine bestimmte "Visual C++ Redistributable" auf Ihrem Entwicklungs-PC installieren.

Soweit ich weiß, enthält die Visual C++ Redistributable keine MFC-Laufzeiten. Sie sind als separates MSI-Merge-Modul (MSM) verfügbar.

23
Roger Lipscombe

Ich möchte ein paar Informationen teilen, die ich gefunden habe und herausgefunden habe, wie ich sie für meine Zwecke einsetzen kann.

Anscheinend ist es eine gute Option, statische Verknüpfungen zu verwenden. Es hat nicht immer für mich funktioniert, aber für ein kleineres Projekt von mir funktioniert es ziemlich gut. Und das Ergebnis ist eine DLL ohne Abhängigkeiten außer kernel32.dll und dergleichen.

Verwenden Sie einfach /MT für die Release-Konfiguration und /MTd für das Debuggen.

Das Problem hier ist, dass ein Entwickler wie ich die aktuelle Visual Studio-Version kurz nach der Veröffentlichung erhält, aber man kann nicht erwarten, dass normale Benutzer Runtime-Zeiten installieren, die erst ein paar Wochen alt sind. Die Installation verschiedener Versionen von Visual Studio, um die alte Laufzeitumgebung zu verwenden, ist definitiv nicht das, was Sie möchten.

Static linking in Visual Studio 2013

7
bytecode77

Ein Hinweis zum Internetarchiv. (Ich kann die obigen Aussagen nicht kommentieren, ich weiß nicht warum)

Um das Toolset v90 platform (= Visual Studio 2008) in einem neueren Visual Studio (I testet 2013 und 2015) verwenden zu können, müssen Sie Visual Studio 2008 und zusätzlich Visual Studio 2010 installieren, da die Definitionen des vs90 Platform Toolset im MS Build-Programmordner sind Teil von Visual Studio 2010. 

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\x64\PlatformToolsets für v90 und v100

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

für V110 V120 und V140

visual Studio-Versionen: v90 = 2008, v100 = 2010, v110 = 2012, v120 = 2013, v140 = 2015.

Nach der Installation von VS2010 konnten die neueren Versionen von Visual Studio 2013 und 2015 die Plattform-Toolsets vs90 und vs100 verwenden. (Dies funktioniert sofort ohne eine neue Installation von Visual Studio 2013/2015.) Ich denke, Visual Studio 2012 macht es genauso wie VS2013 und VS2015.

2
bernie3280109

nun, es hängt davon ab, was Sie zu bauen versuchen. Einige Dinge werden möglicherweise durch die Installation von Windows SDK 7.1 unterstützt. Siehe diesen Beitrag, dieselbe Frage , Wenn Ihr Projekt jedoch von MFC abhängig ist, sieht es leider so aus, als wäre es überhaupt nicht möglich, hauptsächlich weil VS2010 nur die MFC-Bibliotheken bereitstellt.

1
4pie0