Использовать Visual Studio 2012 и компилировать с более старой платформой?

Эта проблема

Я использую Visual Studio 2012 для разработки C++ DLL. На некоторых машинах эти DLL не могут быть загружены, потому что отсутствует набор инструментов платформы, для которого задано значение "v110".

Я пытался установить старые версии C++. Они не были установлены, потому что "более новая версия уже установлена". Я также установил текущий Windows SDK, но по-прежнему нет других элементов, кроме v110.

Вопрос

Как я могу скомпилировать мою C++ DLL с более старой версией среды выполнения C++, чтобы она работала на машинах, не являющихся разработчиками?

Набор инструментов платформы v110

4 ответа

Решение

Согласно этой странице MSDN, вам нужна соответствующая версия Visual Studio (2008 или 2010) или соответствующий Windows SDK для "Platform Toolset", чтобы отобразить эти версии:

Чтобы изменить набор инструментов целевой платформы, у вас должна быть установлена ​​соответствующая версия Visual Studio или Windows Platform SDK.

Вы также, кажется, немного запутались между "Platform Toolset", который контролирует, какой компилятор / компоновщик / и т.д. используется для создания вашего приложения и "Visual C++ Redistributable", который необходим для запуска вашего приложения. Вы не можете установить "Набор инструментов платформы" на ПК пользователя, и при этом вы не сможете сделать его доступным, установив конкретный "Распространяемый Visual C++" на своем ПК для разработки.

Кроме того, насколько я знаю, распространяемый Visual C++ не включает в себя среды выполнения MFC. Они доступны как отдельный модуль слияния MSI (MSM).

Я хотел бы поделиться некоторой информацией, с которой я столкнулся и выяснил, как использовать их в своих целях.

По-видимому, это хороший вариант для использования статических ссылок. Это не всегда работает для меня, но для моего меньшего проекта, это работает довольно хорошо. И результатом является DLL без каких-либо зависимостей, кроме kernel32.dll и тому подобное.

Просто использовать /MT для конфигурации выпуска и /MTd для отладки, и вы будете в порядке.

Проблема здесь в том, что такой разработчик, как я, получает текущую версию Visual Studio вскоре после ее выпуска, но вы не можете ожидать, что обычные пользователи будут иметь установленные среды выполнения, которым всего несколько недель. И установка разных версий Visual Studio только для того, чтобы использовать старую среду выполнения, определенно не то, что вам нужно.

Статическое связывание в Visual Studio 2013

Подсказка для интернет-архива. (Я не могу комментировать заявления выше, я не знаю почему)

Чтобы использовать набор инструментов платформы v90 (=Visual Studio 2008) в более новой версии Visual Studio (я тестирую 2013 и 2015 годы), вам необходимо установить Visual Studio 2008 и дополнительно Visual Studio 2010, поскольку определения набора инструментов платформы vs90 в папке программ MS Build часть фон Visual Studio 2010.

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\x64\PlatformToolsets для v90 и v100

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

для V110 V120 и V140

представляют версии Visual Studio: v90=2008, v100=2010, V110=2012, V120=2013, V140=2015.

После установки vob VS2010 более новые версии Visual Studio 2013 и 2015 могли использовать наборы инструментов платформы vs90 и vs100. (Это безотказно работает без новой установки Visual Studio 2013/2015.) Я думаю, Visual Studio 2012 делает это так же, как VS2013 и VS2015.

Ну, это зависит от того, что вы пытаетесь построить. Некоторые вещи поддерживаются установкой Windows SDK 7.1. см. этот пост, тот же вопрос, но если ваш проект зависит от MFC, то, к сожалению, похоже, что это вообще невозможно, в основном потому, что только VS2010 развертывает библиотеки MFC.

Другие вопросы по тегам