Что такое библиотека времени выполнения C? - программирование

Что такое библиотека времени выполнения C?

Что на самом деле является библиотекой времени выполнения C и для чего она используется? Я искал Googling как дьявол, но я не мог найти ничего лучше, чем Microsoft: "Библиотека времени выполнения Microsoft предоставляет подпрограммы для программирования для операционной системы Microsoft Windows. Эти процедуры автоматизируют многие общие задачи программирования, которые не предоставляются языки C и С++.

Хорошо, я понимаю, но, например, что находится в libcmt.lib? Что оно делает? Я думал, что стандартная библиотека C является частью компилятора C. Таким образом, реализация libcmt.lib Windows стандартных функций библиотеки C для работы под win32?

4b9b3361

Ответ 1

Да, libcmt является (одной из нескольких) реализаций стандартной библиотеки C, поставляемой с компилятором Microsoft. Они предоставляют как "отладочные", так и "выпускные" версии трех основных типов библиотек: однопоточные (всегда статически связанные), многопоточные статически связанные и многопоточный динамически связанный (хотя, в зависимости от используемой версии компилятора, некоторые из них могут отсутствовать).

Итак, в имени "libcmt" "libc" является (более или менее) традиционным именем для библиотеки C. "Mt" означает "многопоточность". В версии "debug" будет добавлен "d", дающий "libcmtd".

Что касается функций, которые он включает в себя, стандарт C (часть 7, если вам заблагорассудится) определяет набор функций, которые должна обеспечить соответствующая (размещенная) реализация. Большинство поставщиков (включая Microsoft) добавляют различные другие функции (для совместимости, для обеспечения возможностей, которые стандартные функции не адресуют и т.д.). В большинстве случаев он также будет содержать довольно много "внутренних" функций, которые используются компилятором но обычно не конечным пользователем.

Если вы хотите получить полный список функций в "libcmt" (чтобы использовать ваш пример), вы можете открыть одну из команд командной строки Visual Studio (обычно в разделе "Инструменты Visual Studio" ), переключиться в каталог, где ваши библиотеки были установлены и введите что-то вроде: lib -list libcmt.lib, и он будет генерировать (длинный) список имен всех объектных файлов в этой библиотеке. Они не всегда соответствуют именам функций, но обычно дают представление. Если вы хотите посмотреть конкретный объектный файл, вы можете использовать lib -extract для извлечения одного из этих объектных файлов, а затем использовать `dumpbin/symbols ', чтобы найти, какие функции/находятся в этом конкретном объектном файле.

Ответ 2

Сначала мы должны понимать, что такое Runtime Library; и подумайте, что это может означать "Microsoft C Runtime Library".

см. ниже: http://en.wikipedia.org/wiki/Runtime_library

Я опубликовал большую часть этой статьи, потому что он может быть обновлен.

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

Также некоторые функции, которые могут выполняться только (или являются более эффективными или точными) во время выполнения, реализованы в библиотеке времени выполнения, например. некоторые логические ошибки, проверка границ массивов, проверка динамического типа, обработка исключений и, возможно, функциональность отладки. По этой причине некоторые ошибки программирования не обнаружены до тех пор, пока программа не будет протестирована в "живой" среде с реальными данными, несмотря на сложную проверку времени компиляции и предварительное тестирование. В этом случае конечный пользователь может столкнуться с сообщением об ошибке выполнения.

Обычно библиотека времени выполнения реализует множество функций, обращаясь к операционной системе. Многие языки программирования имеют встроенные функции, которые необязательно должны реализовываться в компиляторе, но могут быть реализованы в библиотеке времени выполнения. Таким образом, граница между библиотекой времени выполнения и стандартной библиотекой зависит от производителя компилятора. Поэтому библиотека времени выполнения всегда специфична для компилятора и зависит от платформы.

Понятие библиотеки времени выполнения не следует путать с обычной библиотекой программ, созданной прикладным программистом или поставляемой третьей стороной или динамической библиотекой, что означает библиотеку программ, связанную во время выполнения. Например, язык программирования C требует только минимальную библиотеку времени выполнения (обычно называемую crt0), но определяет большую стандартную библиотеку (называемую C стандартной библиотекой), которую должна выполнить каждая реализация.

Ответ 3

C - это язык, и в его определении нет необходимости в каких-либо функциях, доступных вам. Нет IO, нет математических упражнений и так далее. По соглашению, существует набор доступных вам подпрограмм, которые вы можете связать с вашим исполняемым файлом, но вам не нужно их использовать. Это, однако, такая общая вещь, что большинство линкеров не просят вас больше ссылаться на библиотеки времени выполнения C.

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

Ответ 4

Я просто спросил это сам и несколько часов болел своим мозгом. Тем не менее не нашел ничего, что действительно могло бы сказать. Каждый, кто пишет что-то в теме, не может "научить". Если вы хотите научить кого-то, возьмите самый простой язык, который понимает человек, поэтому ему не нужно заботиться о других темах при работе с темой. Поэтому я сам пришел к выводу, что, кажется, хорошо подходит во всем этом хаосе.

В языке программирования C каждая программа начинается с функции main(). Другие языки могут определять другие функции, в которых запускается программа. Но процессор не знает main(). Процессор знает только предопределенные команды, представленные комбинациями "0" и "1".

В микропроцессорном программировании, не имея базовой операционной системы (Microsoft Windows, Linux, MacOS,..), вам нужно явно указать процессору, с чего начать, установив ProgrammCounter (ПК), который выполняет итерацию и прыжки (петли, функция звонки) в командах, известных процессору. Вам нужно знать, насколько велика оперативная память, вам нужно установить положение стека программ (локальные переменные), а также положение кучи (динамические переменные) и расположение глобальных переменных (i gues она называлась SSA?) в ОЗУ. Один процессор может выполнять только одну программу за раз.

То, куда входит операционная система. Сама операционная система - это программа, которая работает на процессоре. Программа, которая позволяет выполнять пользовательский код. Запускает сразу несколько программ за счет переключения между исполняемыми кодами программ (которые загружаются в ОЗУ). Но операционная система IS A PROGRAM, каждая программа написана по-разному. Простое размещение кода вашей пользовательской программы в ОЗУ не будет работать, операционная система этого не знает. Вам необходимо вызвать функции в операционной системе, которая регистрирует вашу программу, сообщить операционной системе, сколько памяти требуется программе, где расположена точка входа в программу (функция main() в случае C). И это то, что я нахожу в RuntimeLibrary, и объясняет, почему вам нужна специальная библиотека для каждой операционной системы, потому что это просто программы сами и имеют разные функции для этого.

Это также объясняет, почему он не динамически связан во время выполнения, поскольку файлы .dll, даже если он называется RUNTIMELibrary. RuntimeLibrary необходимо связать статически, потому что это необходимо при запуске вашей программы. RuntimeLibrary вводит/подключает вашу пользовательскую программу в/в другую программу (операционную систему) в RUNTIME. Это реально вызывает некоторые мозги...

Вывод: RUNTIMELibrary - неудача в именовании. Возможно, в ранние времена не было .dll(ссылка на время выполнения), и проблема понимания разницы просто не существовала. Но даже если это так, имя плохо выбрано.

Лучшими именами для RuntimeLibrary могут быть: StartupLibrary/OSEntryLibrary/SystemConnectLibrary/OSConnectLibrary

надеюсь, что я понял, исправил/расширил веселит.

Ответ 5

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

Хорошее описание различных вариантов библиотек времени исполнения: http://www.davidlenihan.com/2008/01/choosing_the_correct_cc_runtim.html

Он включает те функции, которые вы обычно не считаете необходимыми для вызова библиотеки:

  • таНос
  • enum, struct
  • abs, min
  • утверждают,

Microsoft имеет хороший список функций библиотеки времени выполнения:

http://msdn.microsoft.com/en-us/library/2aza74he (VS.71).aspx

Точный список функций будет зависеть от компилятора, поэтому для iOS вы получите другие функции, такие как dispatch_async() или NSLog().

Ответ 6

Если вы используете такой инструмент, как Dependency Walker, в исполняемом файле, скомпилированном из C или C++, вы увидите, что одна из библиотек DLL, от которых она зависит, - это MSVCRT.DLL. Это библиотека времени выполнения Microsoft C. Если вы дополнительно изучите MSVCRT.DLL с DW, вы увидите, что здесь находятся все функции, такие как printf(), put (0, gets(), atoi() и т.д.).

Ответ 7

Я думаю, что определение Microsoft действительно означает:

Реализация Microsoft стандартная библиотека времени выполнения C предоставляет...

Ответ 8

Существуют три формы библиотеки времени выполнения C, поставляемой с Win32 SDK:

* LIBC.LIB is a statically linked library for single-threaded programs.
* LIBCMT.LIB is a statically linked library that supports multithreaded programs.
* CRTDLL.LIB is an import library for CRTDLL.DLL that also supports multithreaded programs. CRTDLL.DLL itself is part of Windows NT. 

32-разрядная версия Microsoft Visual С++ также содержит эти три формы, однако CRT в DLL называется MSVCRT.LIB. DLL является распространяемым. Его имя зависит от версии VС++ (то есть MSVCRT10.DLL или MSVCRT20.DLL). Однако обратите внимание, что MSVCRT10.DLL не поддерживается на Win32, а CRTDLL.LIB поддерживается на Win32. MSVCRT20.DLL поставляется в двух версиях: один для Windows NT, а другой для Win32.

см.: http://support.microsoft.com/?scid=kb%3Ben-us%3B94248&x=12&y=9

Ответ 9

так... я не понял... библиотека времени выполнения C - стандартная библиотека C или нет? Я думаю, что библиотека времени выполнения Microsoft C включает в себя реализацию всех (ANSI?) Стандартных библиотек C плюс специальные функции от Microsoft, расширяющие стандартную библиотеку.