Функции библиотеки CRT

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

Библиотеки времени выполнения c (CRT)

Следующие библиотеки содержат функции библиотеки c времени выполнения.

Библиотека времени выполнения c (без iostream и стандартная библиотека C++)

Связанные библиотеки DLL

Характеристики

Параметр

Директивы препроцессора

библиотеки LIBCMT.lib

Нет, статической компоновки.

Многопоточный, статические связи

/MT

_MT

библиотеки MSVCRT.lib

msvcr110.dll

Многопоточный, динамические ссылки (библиотека импорта MSVCR110.БИБЛИОТЕКА DLL).Имейте в виду, что при использовании стандартной библиотеки C++, программы должны MSVCP110.Библиотека DLL для запуска.

/MD

_MT, _DLL

библиотеки LIBCMTD.lib

Нет статических ссылок

Многопоточный, статические связи (Отладка).

/MTd

_DEBUG, _MT

библиотеки MSVCRTD.lib

msvcr110d.dll

Многопоточный, динамические ссылки (библиотека импорта MSVCR110D.DLL) (Отладка).

/MDd

_DEBUG, _MT, _DLL

msvcmrt.lib

Нет статических ссылок

Статические библиотеки c времени выполнения.Для смешанного управляемого и машинного кода.

/clr

/clr:oldSyntax

 

msvcurt.lib

Нет статических ссылок

Статическая библиотека времени выполнения c компилируются как 100% чистого MSIL-кодом.Весь код соответствует требованиям спецификации ECMA URT для MSIL.

/clr:pure

 

ПримечаниеПримечание

Однопотоковое CRT (libc.lib, libcd.lib) (ранее /ML или /MLd параметры) больше не доступен.Вместо этого используйте многопотоковые CRT.Дополнительные сведения см. в разделе Многопоточные производительность библиотек.

Если связь программы из командной строки без параметра компилятора, который указывает библиотеки c времени выполнения, компоновщик будет использовать LIBCMT.LIB.Это отличается от предыдущих версий Visual C++, которая используется LIBC.LIB, библиотека однопоточной вместо.

Статически CRT подразумевает, что все сведения о состоянии, сохранены в библиотеке времени выполнения c будет локальным для этого экземпляра CRT.Например, если используется strtok, _strtok_l, wcstok, _wcstok_l, _mbstok, _mbstok_l при использовании статически CRT, положение strtok несвязанных синтаксического анализатора для strtok состояние, используемое в коде в одном процессе (но в разных DLL или EXE), который связан с другим экземпляром статического CRT.В отличие от CRT динамически связанные общим состоянием для всего кода в рамках процесса, динамически связываемая с CRT.Это не применимо при использовании нового более безопасные версии этих функций; например strtok_s не имеет этой проблемы.

Так как библиотеки DLL, построенные путем создания ссылки на статические CRT будет иметь состояние CRT, не рекомендуется для статических ссылок на CRT в библиотеке DLL, если последствия этого специально необходимости и не распознан.Например, если вызвать _set_se_translator в исполняемый файл, который загружает библиотеку DLL связанного собственного статического CRT, все аппаратные исключения, созданного кода из библиотеки DLL, не обнаруживаться транслятор, но будет перехвачено аппаратные исключения, созданного кода в основной исполняемый файл.

При использовании /clr переключатель компилятора кода связана с статические библиотеки, msvcmrt.lib.Статическая библиотека предоставляет прокси между CRT машинного и управляемого кода.Нельзя использовать статически CRT ( /MT или /MTd параметры) с /clr.Динамически компонуемые библиотеки (/MD или /MDd) вместо него.

При использовании /clr:pure переключатель компилятора кода будет связан с msvcurt.lib статической библиотеки.Как и в /clr, нельзя связать с статической библиотеки.

Дополнительные сведения об использовании CRT с /clr, см. Смешанные (собственные и управляемые) сборки; for /clr:pure, see Чистый и проверяемый код (C++/CLI).

Построение отладочной версии приложения, _DEBUG флаг должен быть определен и приложения должны быть связаны с отладочной версией одного из этих библиотек.Дополнительные сведения об использовании отладочных версий файлов библиотеки см. Методы отладки CRT.

Эта версия Visual C++ не совместимый со стандартом C99.

Стандартная библиотека C++

Стандартная библиотека C++

Характеристики

Параметр

Директивы препроцессора

LIBCPMT.LIB

Многопоточный, статические связи

/MT

_MT

MSVCPRT.LIB

Многопоточный, динамические ссылки (библиотека импорта MSVCP110.dll)

/MD

_MT, _DLL

LIBCPMTD.LIB

Многопоточный, статические связи

/MTd

_DEBUG, _MT

MSVCPRTD.LIB

Многопоточный, динамические ссылки (библиотека импорта MSVCP110D.БИБЛИОТЕКА DLL)

/MDd

_DEBUG, _MT, _DLL

Примечание LIBCP.LIB и LIBCPD.LIB (через старые /ML и /MLd параметры) были удалены.С помощью LIBCPMT.LIB и LIBCPMTD.Вместо этого LIB через /MT и /MTd параметры.

При построении окончательной версии проекта, один из основных c библиотек времени выполнения (LIBCMT.LIB, MSVCMRT.LIB MSVCRT.Связанные LIB) по умолчанию, в зависимости от параметра компилятора выбрать (многопоточный, DLL, / CLR).Если один из Файлы заголовков в коде, стандартная библиотека C++ будет связана в автоматически по Visual C++ во время компиляции.Примеры.

#include <ios> 

Различие между msvcrt.dll и msvcr110.dll

Msvcrt.dll теперь является «Известных DLL,» означает, что это системный компонент, принадлежащих и встроенный в Windows.Он предназначен для использования в будущем только системные компоненты.

Какие проблемы существуют, если приложение использует msvcrt.dll и msvcr110.dll?

Если у файла LIB или OBJ, который необходимо связать с библиотекой msvcrt.lib затем вам не следует перекомпилировать его для работы с новой библиотеки msvcrt.lib в Visual C++.Файла LIB или OBJ может зависеть от размера, смещения полей или функции имена членов из различных классов CRT или переменных и их следует все по-прежнему существуют совместимым способом.При повторном связывании против msvcrt.lib конечное изображение EXE и DLL, теперь имеют зависимость от msvcr110.dll вместо msvcrt.dll.

Если имеется более одной библиотеки DLL или EXE, то может иметь более одного CRT или нет с использованием разных версий Visual C++.Например статическое связывание CRT в нескольких DLL может представлять ту же проблему.При возникновении этой проблемы с помощью статических ЭЛТ-мониторы разработчики уже имеющийся для компиляции с /MD использовать библиотеку DLL CRT.Теперь, когда библиотека DLL CRT был переименован в msvcr110.dll, приложения могут иметь некоторые компоненты, связанные с msvcrt.dll и другие msvcr110.dll.Библиотек DLL CRT ресурсы проходят через границу msvcrt.dll и msvcr110.dll, будут возникать проблемы с несоответствием ЭЛТ-мониторы и потребуется перекомпилировать проект с помощью Visual C++.

Если программа использует более чем одну версию CRT, некоторое внимание необходимо при передаче определенных объектов CRT (такие как дескрипторы файлов, языков и переменные среды) через границы DLL.Дополнительные вопросы, связанные и способы их устранения см. Потенциальные ошибки при передаче объекты через границы библиотека DLL CRT.

См. также

Другие ресурсы

Справочник по библиотеке времени выполнения языка c