Подтвердить что ты не робот

Есть ли побочные эффекты использования макроса _BIND_TO_CURRENT_VCLIBS_VERSION?

Мы переносим проект VС++ из Visual Studio 2003 в Visual Studio 2008 SP1 (9.0.30729.4148). Зависимые внешние библиотеки также скомпилированный с помощью Visual Studio 2008 SP1.

MainApp - Main application Compiled with VS SP1 9.0.30729.4148
ExtStaticLib1 - External static library compiled with VS  SP1 9.0.30729.4148
ExtDynamicDll1 - External DLL compiled with VS  SP1 9.0.30729.4148

Существует два сценария развертывания для основного приложения:

  • Машина с правами администратора пользователя: Мы рекомендовали поставить предварительный запрос на установку распространяемого пакета Visual Studio перед использованием приложения MainApp. Это хорошо работает, поскольку пользователь имеет права администратора и установка распространяемого пакета не имеет проблем. Связывание приложений с виртуальными DLL файлами VC в папках WinSxS автоматически.
  • Машина с пользователем без администратора: Этот сценарий проблематичен. Пользователь не имеет прав администратора. Следовательно, установить VS2008SP1 пакет перераспределяемого пакета невозможно.

Мы делаем следующее, чтобы решить эту проблему:

  • Скомпилируйте объекты MainApp с помощью макроса _BIND_TO_CURRENT_OPENMP_VERSION (для всех проектов в MainApp).

  • Распространяйте распространяемые DLL-библиотеки VS2008SP1 как частные сборки и скопируйте их в каталог установки приложения.

Вопросы:

  • Есть ли какой-либо побочный эффект использования флага _BIND_TO_CURRENT_VCLIBS_VERSION (Специально, когда совместно распространяются пакеты VC и частные сборки VC-переименования)?
  • У нас нет большого контроля над внешними библиотеками ExtStaticLib1, ExtDynamicDll1 и, следовательно, они не будут скомпилированы с макросом _BIND_TO_CURRENT_OPENMP_VERSION. Но они уже скомпилированы с VSSp1. Будут ли какие-либо проблемы с этой настройкой?
  • Будет ли какая-либо проблема, если доступна новая версия распространяемого VS (новее, чем 9.0.30729.4248).

Спасибо.

4b9b3361

Ответ 1

Я бы не использовал ни один из макросов BIND. Вы скоро столкнетесь с неприятностями.

Даже если вы распространёте DLL-среду выполнения VC как частные сборки, вы не можете быть уверены, что пользователь не установил их уже с каким-либо другим приложением.

Возникает одна проблема: вы можете получить манифест, который ссылается на несколько версий c-runtime. Здесь открытая проблема об этом (FYI: у меня была такая же проблема!).

Итак, если нет причин, которые заставили бы вас использовать только определенную версию c-runtime, а не последнюю совместимую, тогда не используйте эти макросы define!