Я читаю о /MT и /MD, но я немного смущен этим
Сердце - это то, что я не совсем понимаю:
/MT Призывает ваше приложение использовать многопоточную статическую версию библиотеки времени выполнения. Определяет _MT и заставляет компилятор помещать имя библиотеки LIBCMT.lib в файл.obj, чтобы компоновщик использовал LIBCMT.lib для разрешения внешних символов.
что это значит?
Если вы связываетесь с /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 зависит от вас, вы можете использовать ходок зависимости.