Почему мы должны установить / MT для запуска исполняемого файла на другом компьютере

0

Я читаю о /MT и /MD, но я немного смущен этим

Сердце - это то, что я не совсем понимаю:

/MT Призывает ваше приложение использовать многопоточную статическую версию библиотеки времени выполнения. Определяет _MT и заставляет компилятор помещать имя библиотеки LIBCMT.lib в файл.obj, чтобы компоновщик использовал LIBCMT.lib для разрешения внешних символов.

что это значит?

  • 0
    Это означает, что ваша программа связана статически и, следовательно, не нужно устанавливать DLL на целевой компьютер.
  • 0
    Спасибо, тогда в чем проблема, если я вместо этого установлю / MD?
Показать ещё 1 комментарий
Теги:

1 ответ

3

Если вы связываетесь с /MD или /MDd ваша программа будет нуждаться в /MDd CRT для запуска. обычно они называются чем-то вроде msvcp100.dll для среды выполнения C++ и msvcr100.dll для среды выполнения C. Если вы развертываете свое приложение с помощью установщика, вы можете добавить пакет с ними в ваш установщик, чтобы библиотеки DLL были там, когда кто-то запускал приложение. Если, с другой стороны, вы собираетесь развернуть свое приложение как отдельный отдельный exe, вашим пользователям понадобится копия этих библиотек. Последние версии этих DLL обычно поставляются с самими окнами (а не с отладчиками), но если ваш пользователь работает с более старой версией Windows, у него могут не быть необходимые DLL.

Связывание приложения с статической версией CRT экономит всю эту головную боль по цене, которую exe немного больше (поскольку в ней содержится CRT)

Если вы используете /MT (Static CRT), вы должны убедиться, что все остальное, что вы статически связываете с использованием /MT также. в противном случае вы получите исполняемый файл, в котором часть кода использует статический CRT, а часть все еще зависит от DLL CRT. Помимо устранения основной цели, не требующей DLL CRT, это может также вызвать другие проблемы.
Чтобы убедиться в том, какие DLL ваши exe зависит от вас, вы можете использовать ходок зависимости.

  • 0
    И за ту цену, что любые обновления CRT, даже критические обновления безопасности, не применяются к вашему приложению, верно? Насколько велик этот риск, зависит от приложения.
  • 1
    Microsoft CRT существует уже около 20 лет. Я был бы удивлен, будет ли когда-нибудь критическое обновление безопасности для него.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню