Ответ 1
Библиотека C runtime
только, поставляемая Microsoft с большинством 32-битных версий Windows, msvcrt.dll
. Эта библиотека предоставляет типичный набор библиотечных функций, требуемых программами C
и C++
. К ним относятся string manipulation
, memory allocation
, C-style input/output calls
и т.д. Visual Studio 6.0
s с этой библиотекой, поэтому, если вы работаете в VS 6.0
, вы не должны обнаруживать никаких проблем на большинстве компьютеров пользователей.
Однако, если вы разрабатываете в VS 2005
, VS 2008
, VS 2010
, VS 2012
, VS 2013
или VS 2015
, вам необходимо распространять дополнительные библиотеки C runtime
вместе с вашим приложением. Это связано с тем, что их компиляторы связаны с msvcrt80.dll
, msvcrt90.dll
, msvcrt100.dll
, msvcrt110.dll
, msvcrt120.dll
и msvcrt140.dll
соответственно, которые не поставляются с окнами.
Решения:
-
Возможное решение - связать статически с библиотекой времени выполнения, но это может вызвать множество проблем, если в вашем приложении есть как
.exe
, так и.dll
. Не делайте этого.
Чтобы быть более конкретным, я позволю себе процитировать часть этого ответа:Использование/MT является рискованным, если вы создаете библиотеки DLL, а также EXE. Вы закончите с несколькими копиями ЭЛТ в вашей программе. Это было особенно проблема с более ранними версиями VS, где каждый CRT получал бы свои собственные куча, не столько с VS2012. Но у вас все еще может быть уродливое время выполнения проблемы, если у вас более одной переменной "errno", например. Использование /MD настоятельно рекомендуется избегать такого снижения.
-
Еще одно возможное решение - потребовать, чтобы на компьютере пользователя был установлен соответствующий пакет
Microsoft Visual C++ Redistributable
.
Это можно сделать, указав это требование в свойстве предварительных условий в вашем проекте установки. - Кроме того, вы можете распространять среду выполнения
dll
, включив в свой проект настройки соответствующийmerge module
. В этом случае не забудьте добавить соответствующийpolicy merge module
, чтобы избежать ошибок, вызванных неправильной версией времени выполнения. - Наконец, вы можете просто поместить требуемый
dll
в ту же папку, в которой установлено ваше приложение.
Перераспределение файлов Visual С++ - Официальная документация MSDN