Да, libcmt является (одной из нескольких) реализаций стандартной библиотеки C, предоставляемой компилятором Microsoft. Они предоставляют «отладочную» и «выпускную» версии трех основных типов библиотек: однопоточные (всегда статически связанные), многопоточные статически связанные и многопоточные динамически связанные (хотя, в зависимости от версии компилятора, который вы используете некоторые из них могут отсутствовать).
Таким образом, в названии "libcmt" "libc" - это (более или менее) традиционное имя для библиотеки C. «Mt» означает «многопоточный». В «отладочную» версию в конце добавили бы «d», давая «libcmtd».
Что касается функций, которые он включает, стандарт C (часть 7, если вам не все равно) определяет набор функций, которые должна обеспечивать соответствующая (размещенная) реализация. Большинство поставщиков (включая Microsoft) сами добавляют различные другие функции (для совместимости, для обеспечения возможностей, которые стандартные функции не обрабатывают, и т. Д.) В большинстве случаев он также будет содержать довольно много «внутренних» функций, которые используются компилятором. но не обычно конечным пользователем.
Если вы хотите получить полный список функций в "libcmt" (используйте ваш пример), вы можете открыть одно из командных приглашений Visual Studio (обычно в разделе "Инструменты Visual Studio"), переключиться в каталог, где находились ваши библиотеки. установить и набрать что-то вроде: lib -list libcmt.lib
и он сгенерирует ( длинный ) список имен всех объектных файлов в этой библиотеке. Они не всегда соответствуют непосредственно именам функций, но обычно дают представление. Если вы хотите просмотреть конкретный объектный файл, вы можете использовать его lib -extract
для извлечения одного из этих объектных файлов, а затем использовать, dumpbin /symbols <object file name>
чтобы найти, какие функции находятся в этом конкретном объектном файле.
strcpy
функция, например, из стандартной библиотеки C, иметь свою реализацию в библиотеке времени выполнения или она просто будет иметь свой код в обычных файлах .c?Сначала мы должны понять, что такое библиотека времени выполнения; и подумайте, что это может означать под «Microsoft C Runtime Library».
видеть: http://en.wikipedia.org/wiki/Runtime_library
Я разместил большую часть статьи здесь, потому что она может быть обновлена.
источник
Я просто спросил об этом сам и несколько часов болел мозг. До сих пор не нашел ничего, что действительно имеет значение. Все, кто что-то пишет в теме, не могут «научить». Если вы хотите научить кого-то, используйте самый простой язык, который понимает человек, поэтому ему не нужно заботиться о других темах при работе с темой. Поэтому я пришел к выводу, что, похоже, хорошо вписывается во весь этот хаос.
На языке программирования C каждая программа начинается с
main()
функции. Другие языки могут определять другие функции, с которых начинается программа. Но процессор не знаетmain()
. Процессор знает только предопределенные команды, представленные комбинациями0
и1
.В микропроцессорном программировании, не имеющем базовой операционной системы (Microsoft Windows, Linux, MacOS, ..), вам нужно явно указать процессору, с чего начать, установив
ProgramCounter
(ПК), который выполняет итерации и скачки (циклы, вызовы функций) в пределах Команды, известные процессору. Вы должны знать, насколько большой объем ОЗУ, вам нужно установить положение стека программы (локальные переменные), а также положение кучи (динамические переменные) и расположение глобальных переменных (я думаю, это называлось SSA). ?) в оперативной памяти. Один процессор может одновременно выполнять только одну программу.Вот тут и приходит операционная система. Сама операционная система - это программа, которая работает на процессоре. Программа, которая позволяет выполнять пользовательский код. Выполняет несколько программ одновременно, переключаясь между кодами выполнения программ (которые загружаются в ОЗУ). Но операционная система - это программа, каждая программа написана по-своему. Простое помещение кода вашей пользовательской программы в оперативную память не приведет к ее запуску, операционная система не знает этого. Вам необходимо вызвать функции в операционной системе, которая регистрирует вашу программу, сообщить операционной системе, сколько памяти требуется программе, где находится точка входа в программу (
main()
функция в случае с). И это то, что, как мне кажется, находится в Runtime Library, и объясняет, почему вам нужна специальная библиотека для каждой операционной системы, потому что это всего лишь сами программы и имеют разные функции для выполнения этих задач.Это также объясняет, почему он НЕ динамически связан во время выполнения с
.dll
файлами, даже если он называется библиотекой RUNTIME. Библиотека времени выполнения должна быть связана статически, потому что она необходима при запуске вашей программы. Runtime Library внедряет / подключает вашу пользовательскую программу в / к другой программе (операционной системе) в RUNTIME. Это действительно вызывает некоторый мозг ...Вывод: RUNTIME Library - сбой в именовании. Возможно, не было
.dll
(связывание во время выполнения) в ранние времена, и проблема понимания разницы просто не существовала. Но даже если это правда, имя выбрано неправильно.Лучшими именами для библиотеки времени выполнения могут быть: StartupLibrary / OSEntryLibrary / SystemConnectLibrary / OSConnectLibrary
Надеюсь, я понял это правильно, для коррекции / расширения. веселит.
источник
C - это язык, и в его определении не должно быть никаких доступных вам функций. Нет ввода-вывода, нет математических процедур и так далее. По соглашению, вам доступен набор подпрограмм, которые вы можете связать со своим исполняемым файлом, но вам не нужно их использовать. Это, однако, настолько распространенная вещь, что большинство компоновщиков больше не просят вас ссылаться на библиотеки времени выполнения C.
Временами вы их не хотите - например, при работе со встроенными системами может быть нецелесообразно, например, иметь malloc. Раньше я работал над встраиванием PostScript в принтеры, и у нас был собственный набор библиотек времени выполнения, которые были намного счастливее на встраиваемых системах, поэтому мы не беспокоились о «стандарте».
источник
Библиотека времени выполнения - это библиотека, которая автоматически компилируется для любой программы на C, которую вы запускаете. Версия используемой вами библиотеки зависит от вашего компилятора, платформы, параметров отладки и параметров многопоточности.
Хорошее описание различных вариантов для библиотек времени выполнения: http://www.davidlenihan.com/2008/01/choosing_the_correct_cc_runtim.html
Он включает в себя те функции, которые обычно не нужны для вызова библиотеки:
У Microsoft есть хороший список функций библиотеки времени выполнения:
http://msdn.microsoft.com/en-us/library/2aza74he(VS.71).aspx
Точный список функций зависит от компилятора, поэтому для iOS вы можете получить другие функции, например dispatch_async () или NSLog ().
источник
Если вы используете такой инструмент, как Dependency Walker, в исполняемом файле, скомпилированном из C или C ++, вы увидите, что одна из библиотек DLL, от которых она зависит, - это MSVCRT.DLL. Это библиотека времени выполнения Microsoft C. Если вы дополнительно изучите MSVCRT.DLL с DW, вы увидите, что здесь находятся все функции, такие как printf (), put (0, gets (), atoi () и т. Д.).
источник
я думаю, что определение Microsoft действительно означает:
источник
В Win32 SDK есть три формы библиотеки времени выполнения C:
32-разрядная версия Microsoft Visual C ++ также содержит эти три формы, однако CRT в DLL называется MSVCRT.LIB. DLL является распространяемой. Его имя зависит от версии VC ++ (то есть MSVCRT10.DLL или MSVCRT20.DLL). Обратите внимание, что MSVCRT10.DLL не поддерживается в Win32s, а CRTDLL.LIB поддерживается в Win32. MSVCRT20.DLL поставляется в двух версиях: одна для Windows NT, а другая для Win32s.
см .: http://support.microsoft.com/?scid=kb%3Ben-us%3B94248&x=12&y=9
источник