Преимущества msvcr100 перед msvcrt

Я хотел бы спросить, есть ли преимущество в msvcr100 перед msvcrt и каковы будут преимущества.

При компиляции с помощью компилятора msvc исполняемый файл, который я получаю, связан с msvcr100, поэтому для его установки необходимо установить MS Visual C ++ Redistributable. Если я скомпилирую его с помощью g ++ (mingw), то такого требования не будет. Я предполагаю, что это связано с msvcrt, вместо этого.

Я предпочитаю сохранять зависимости как минимум, поэтому я хочу знать, есть ли смысл использовать компилятор, который ссылается на mscvr100.

Спасибо.

4

Решение

Msvcrt.dll является частный DLL, предназначенная для использования только самой Windows. Разные версии Windows имеют разные версии msvcrt.dll.

У вас будет серьезная головная боль, когда вы обнаружите, что способ использования CRT вызывает сбой в конкретной версии Windows. Включая вид сбоя, который требует машины времени, новая версия Windows может иметь новую копию msvcrt.dll, которая приводит к сбою вашей программы. Проблема, иначе известная как DLL Hell.

Преимущество использования msvcr100.dll в том, что шансы на это много меньше. Вы работаете с известен версия ЭЛТ. Даже если в самой Windows есть серьезное изменение, которое нарушает работу msvcr100.dll, тогда все равно есть решение: вы можете его обновить. Это невозможно с msvcr.dll, это DLL, которая защищена функцией защиты файловой системы. Перезаписать его установщиком, как правило, было бы довольно пагубно, потому что это может сломать саму Windows. Но это не может вызвать сбой, Windows автоматически восстанавливает его. Также причина, по которой вы не должны следовать совету Фойт.

5

Другие решения

Если вы используете компилятор MS более поздней, чем версия 6, вам нужно будет ссылаться на среду выполнения, специфичную для этого компилятора. У вас нет выбора в этом вопросе. Поскольку среды выполнения MSVC не являются системными DLL, вам нужно будет распространять их вместе с вашим приложением.

Если вы используете MSVC6 или компилятор, который может ссылаться на msvcrt.dll, то вы можете ссылаться на msvcrt.dll.

Компилятор Mingw вполне настраивается. Тем не менее, я считаю, что он обычно будет ссылаться на msvcrt.dll. Поскольку msvcrt.dll является системной DLL (начиная с Windows 2000 IIRC), вам не нужно распространять ее.

Я предполагаю, что вы динамически ссылаетесь на среду выполнения. Это предпочтительный вариант, но всегда можно статически связать со средой выполнения. Когда вы делаете это, вы делаете приложение автономным.

Все сводится к тому, какой компилятор вы предпочитаете использовать. Если вы предпочитаете использовать современный MSVC, вам нужно будет принять дистрибутив среды выполнения или сделать статическую ссылку.

3

По вопросам рекламы [email protected]