Библиотека времени выполнения MS Visual C ++ - зачем? - PullRequest
6 голосов
/ 18 ноября 2010

Что находится в библиотеке времени выполнения MS Visual C ++?Я имею в виду, я погуглил это, и я всегда находил такие вещи, как помощь, приложение xxxx дает мне ошибку библиотеки времени выполнения MS Visual C ++, без объяснения причин.

Я думал, что библиотеки времени выполнения Windows C поставляются с Windows?Не с VC ++?Спасибо.

РЕДАКТИРОВАТЬ: Во-первых, спасибо за ответы.Теперь у меня плохое представление о библиотеках времени выполнения в Windows.Я имею в виду, первая часть, что Windows внутренне имеет свой win32 API, и это нормально, я знал это.Кроме того, этот Win32API взят из ядра и пользовательских частей.

Но я всегда думал, что такие функции, как GDI, доступны как DLL (что я до сих пор считаю, что они есть).Но я думал, что даже такие функции, как printf, и так же есть в некоторых файлах Windows.

Итак, я прав, когда я понимаю, что «простые» функции, такие как printf, должны быть связаны напрямую, а затемнапрямую использовать только часть ядра ОС, а более сложные функции Windows API связаны как библиотеки DLL, поэтому НЕ распространяются вместе с компилятором, а с ОС?И они впоследствии обращаются к Ядру?

Я имею в виду, скажем, GDI, я говорю ему рисовать картинку, он делает всю тяжелую работу в пользовательском режиме, а затем вызывает функцию ядра, которая помещает все это в кадровый буфер?

И последняя мысль, почему это даже решается таким образом?Я имею в виду, если среда выполнения VC ++ - это просто слой между C и WinAPI, почему VC ++ не может напрямую вызывать WinAPI?

Ответы [ 4 ]

6 голосов
/ 18 ноября 2010

Это упрощение, но оно даст вам суть. MSVCRT - это набор библиотек DLL, которые реализуют части языка C ++. Такие функции, как printf, memcpy и т.п., реализованы в этих библиотеках.

Каждая программа, которая скомпилирована с определенным компилятором и динамически связана с средами выполнения C ++, должна как-то иметь правильную версию двоичных файлов CRT на целевой машине. В результате приложения, которые поставляются конечным пользователям, часто (обычно?) Также поставляются с пакетом этих DLL. Этот пакет называется «распространяемым» (или «повторным»), и для каждой комбинации точной версии компилятора и целевой платформы существует свой пакет. Например, существуют отдельные и отдельные переадресации для каждого из следующих:

  • MSVC 10, 64-битные окна
  • MSVC 10, 32-битные окна
  • MSVC9, 64-битные окна
  • MSVC9 SP1, 64-битные окна

и так далее.

Да, Windows обычно «поставляется» с какой-то версией CRT. Тем не менее, он поставляется с той версией (версиями), которая ему необходима для запуска приложений, поставляемых с Windows. Если Windows и все ее приложения были скомпилированы в MSVC8 SP2, а ваше приложение скомпилировано в MSVC10, CRT , который вам требуется, не будет присутствовать на коробке просто потому, что он работает под управлением Windows.

Именно поэтому принято отправлять приложения вместе с редистантами.

EDIT:

С точки зрения Гудини, как магии, я предсказываю, что ваш следующий вопрос будет: "Где я могу получить повторные списки?"

Ответ от MicroSoft. Попробуйте поискать в Google "msvc 9 x64 redist", и вы найдете:

http://www.microsoft.com/downloads/en/details.aspx?familyid=bd2a6171-e2d6-4230-b809-9a8d7548c1b6&displaylang=en

2 голосов
/ 18 ноября 2010

Для программ, скомпилированных с помощью Visual C ++, требуется «время выполнения» - это фрагмент кода, который обрабатывает запуск / завершение работы приложения, распределение / освобождение памяти, поддержку чтения и записи файлов и т. Д.

Это не такчасть операционной системы, а не часть конечного приложения - поскольку все приложения C ++ могут совместно использовать его, по умолчанию среда выполнения является отдельной установкой.

Кроме того, каждая версия Visual C ++ имеет свой собственный установщик среды выполнения.Потому что в каждой версии есть небольшие различия и улучшения в том, как все это работает.Существуют также различные версии среды выполнения для разных платформ (например, x86 и x64)

Следовательно, существует ряд загрузок «Установщик среды выполнения Visual Studio XXXX (YYY)», доступных от Microsoft, где XXXX - этоверсия Visual Studio (2005, 2008, 2010 и т. д.), а YYY обычно равен «x86» или «x64».

Большинство приложений, которым требуется среда выполнения, автоматически устанавливают ее при необходимости, поэтому обычно конечные пользователине очень осведомлен об этих распространяемых файлах.

2 голосов
/ 18 ноября 2010

Это библиотеки, которые реализуют стандартные библиотечные функции C и C ++. Стандартные функции, такие как printf, реализованы в этих библиотеках.

Основные библиотеки Windows предоставляют только интерфейсы для системных вызовов, то есть Win32 API , поскольку это все, что вам нужно для создания полнофункционального приложения Windows. Библиотеки VC ++ в основном являются обертками вокруг этого API и аналогичны библиотеке glibc в Linux.

Например, malloc из библиотеки C может, в свою очередь, использовать API VirtualAlloc для выделения памяти.

2 голосов
/ 18 ноября 2010

Коротким ответом будет то, что среда выполнения MSVS C / C ++ реализует такие функции, как malloc / free, stdio, iostream и некоторые c ++, такие как dynamic_cast и обработка исключений. Они отличаются в разных версиях Visual Studio, поэтому для разных версий существуют разные среды выполнения.

Windows поставляется в основном с C API (Win32 API), который довольно сильно отличается от стандартной библиотеки C / C ++. Среда выполнения MSVS C / C ++ вызывает этот API для выделения памяти и т. Д. И т. Д.

(Я полагаю, что некоторые приложения, включенные в Windows, написаны для MSVS и на C ++, поэтому они включают среду выполнения MSVS для этой версии.)

Кроме того, среда выполнения изменяется по мере выпуска новых версий Visual Studio. Выпуск Windows длится намного дольше.

...