Развертывание приложения, разработанного с использованием C ++ - PullRequest
3 голосов
/ 28 ноября 2010

У меня есть приложение, которое использует wxWidgets в качестве инфраструктуры пользовательского интерфейса и скомпилировано с использованием Visual Studio 2010 на компьютере с Windows 7. Я связываю wxWidgets статически. Мое приложение также использует C dll для обработки.

Теперь я пытаюсь запустить это приложение на другом недавно установленном компьютере (Win7). Это не имеет настройки среды разработчика. Я скопировал на этот компьютер исполняемый файл приложения, поддерживающий dll и другие вспомогательные текстовые файлы.

При запуске приложения выдается следующее сообщение.

The program failed to start because MSVCR100d.DLL is missing from your computer. Try reinstalling the program to fix this problem.

Я подумал, что моя библиотека C использовала отладочную версию, и компилирование в режиме Release решило проблему. Но он все еще просит MSVCR100.dll. Я думаю, что обходной путь - установка распространяемого пакета VC ++. Но не уверен, что это лучший подход.

Вот мои вопросы.

  1. Как вы обычно развертываете приложение? Вы также предоставляете распространяемый пакет VC ++?
  2. Я собираю это на 64-битной машине и тестирую на 32-битной. Это нормально? Или мне нужно компилировать отдельно для 32 бит?
  3. Можно ли статически связать библиотеку времени выполнения? Так что я могу просто отправить мои DLL и другие файлы.
  4. Какие еще общие вещи я должен знать при создании исполняемого файла, который будет работать на многих машинах?

Ниже приведены некоторые из моих настроек, которые могут иметь значение.

General : 
    Use of MFC : Use standard windows libraries
    Use of ATL : Not using

C/C++ :
    Runtime library : Multi-threaded(/MT)

Буду признателен за любую помощь.

Ответы [ 3 ]

2 голосов
/ 28 ноября 2010

Он пытается использовать только отладочную DLL на компьютере, на котором ее нет.

Ваша проблема возникает из-за того, что msvcr100d.dll является dll только для отладки, обозначенной конечным d.

Таким образом, вы НЕ используете / MT, вы на самом деле используете / MDd. Если бы вы использовали / MT, то он не попытался бы загрузить эту DLL ...

Итак, в ответ на ваши вопросы:

  1. Я предпочитаю статически ссылаться на время выполнения.
  2. Это действительно не проблема. Только не пытайтесь запускать 64-битный скомпилированный двоичный файл в 32-битной ОС.
  3. Да.
  4. Остерегайтесь вашей минимальной спецификации. т.е. не используйте SSE4, если вам нужна поддержка Pentium 3 ... и т. д.
0 голосов
/ 28 ноября 2010
  1. Да, необходимо предоставить распространяемый пакет VC ++. Лучший способ - создать пакет установки с использованием проекта Visual Studio Setaul и развертывания.

  2. Это нормально, если вы компилируете 32-битный исполняемый файл.

  3. Я не рекомендую этого, такие огромные исполняемые файлы не выглядят профессионально.

0 голосов
/ 28 ноября 2010

Похоже, это тот же вопрос, что и второй удар, когда я погуглил "будет ли x86 exe работать на x64"; он не отвечает на все, но у него есть несколько ответов.

http://social.msdn.microsoft.com/Forums/en/netfx64bit/thread/5ad0ff2c-558c-43ba-a59d-9cd0a0785103

Возможно, вы найдете больше похожей информации, если посмотрите за пределы второй, и если вы запросите еще несколько вещей.

Что касается среды выполнения VC ++, я избегаю версии MS на C ++, такой как чума, и поэтому не имею опыта работы с ней, но, тем не менее, я думал, что все современные компьютеры с Windows должны иметь необходимые компоненты времени выполнения всего своего (VC ++ .NET и т. Д.) Уже включены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...