2013-07-26 2 views
3

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

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

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

спасибо.

+0

Использование mingw не избавляет вас от необходимости отправлять msvcrt.dll, см. [Должен ли я перераспределять msvcrt.dll с моим приложением?] (Http://stackoverflow.com/questions/1073509/should-i-redistribute- msvcrt-dll-with-my-application) –

+2

@BenVoigt В течение долгого времени msvcrt.dll являлась системной DLL. Вы можете полагаться на его присутствие так же, как вы полагаетесь на user32.dll, kernel32.dll и так далее. –

ответ

2

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

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

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

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

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

+0

Есть ли у вас идеи, почему библиотеки MSVCR не являются системными DLL? Более чем очевидно, что эти библиотеки MSVCR понадобятся рано или поздно на любой машине Windows ... – cubuspl42

+0

Команды Windows и VS разделены на MS. Я думаю, что им легче избегать зависимости друг от друга.Обе команды будут добиваться большего прогресса. Более того, как бы новая версия CRT находила свой путь в версии Windows, которая предшествовала этому CRT? Например, как будет работать среда VS12 в XP, Vista или 7? –

5

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

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

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

Смежные вопросы