Как выполнить связывание с правильной библиотекой времени выполнения C (CRT)

Переводы статьи Переводы статьи
Код статьи: 140584 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

Существует шесть типов повторно используемых библиотек.
  • Статическая библиотека одной цепочки (Отладка или выпуск)
  • Статические многопоточные библиотеки (Отладка или выпуск)
  • Динамические Библиотеки (DLL)(Debug/Release)
Примечание Каждая библиотека имеет отладочной версии и версии выпуска.

Библиотека DLL является безопасным в многопоточной и однопоточного версия библиотеки CRT для библиотеки DLL не предоставляется. Если для повторного использования библиотеки или любой пользователь библиотеки использует несколько потоков, а затем библиотека должна быть типизированным многопоточной библиотеки типа.

Примечание Отладочные библиотеки и переключатели компилятора /MLd, / MTd и/MDd, только в Visual C++ версии 4.0 и более поздних версий.

В следующей таблице показано, какой параметр компилятора должен использоваться для построения Каждый из шести типов повторно используемых библиотек (все типы DLL являются безопасными в многопоточной). Любой проект, использующий библиотеку для повторного использования следует использовать тот же компилятор переключатель. При использовании /ML(default), MLd, / MT, MTd, параметр /MD или/MDd компилятора коммутаторы, компилятор размещает имя библиотеки по умолчанию (в разделе Библиотека столбец) в объектном файле.
Reusable Library            Switch    Library    Macro(s) Defined
----------------------------------------------------------------
Single Threaded             /ML       LIBC       (none)
Static MultiThread          /MT       LIBCMT     _MT
Dynamic Link (DLL)          /MD       MSVCRT     _MT and _DLL
Debug Single Threaded       /MLd      LIBCD      _DEBUG
Debug Static MultiThread    /MTd      LIBCMTD    _DEBUG and _MT
Debug Dynamic Link (DLL)    /MDd      MSVCRTD    _DEBUG, _MT, and _DLL
				
Можно просматривать модуль объекта и определить, какой параметр используется при он был построен с помощью этой команды:
   dumpbin /all <object>.obj
				
Искать в разделе НЕОБРАБОТАННЫХ данных #1. В крайнем правом столбце будут перечислены библиотеки по умолчанию.

Дополнительная информация

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

Если вы хотите пользователей библиотеки, чтобы иметь возможность выбрать статический или библиотеки DLL CRT, необходимо предоставить типы многократно используемой библиотеки DLL и статические.

Если вы решили смешать библиотеки CRT, помните, что у вас есть два отдельных Библиотека CRT с отдельных и различных состояний, поэтому должны быть копии особое внимание при попытке сделать на границе CRT. Существует множество способов Для получения неприятности с двух ЭЛТ-мониторы. Ниже приведены лишь несколько.
  • Существует два разных кучах. Не удается выделить (явно с новым, malloc, или около того,--или неявно вместе с strdup, strstreambuf::str, или около того Далее) а затем передать указатель на границе CRT освобождения.
  • Не удается передать дескриптор файла * или файл на границе CRT и ожидать, что «Stdio низкоуровневого ввода» для работы.
  • Не удается установить языковой стандарт в одном и ожидать другого языка для набор.
Начиная с Visual C++ 4.0, компоновщик выдает предупреждение (LNK4098) Если результирующий модуль пытается объединить несколько копий библиотек CRT Библиотека. Для получения дополнительных сведений LNK4098 поиск файла справки.

Пример кода

Можно использовать следующий код в файле заголовка многократно используемой библиотеки обеспечить согласованное использование правильного компилятора коммутатора:
// MyReusableStaticSingleThreadReleaseLibrary.h
#if defined(_MT) || defined(_DEBUG)
    #error The /ML compiler switch is required.
#endif

// MyReusableStaticMultithreadReleaseLibrary.h
#if !defined(_MT) || defined(_DLL) || defined(_DEBUG)
    #error The /MT compiler switch is required.
#endif

// MyReusableDynamicLinkReleaseLibrary.h
#if !defined(_MT) || !defined(_DLL) || defined(_DEBUG)
    #error The /MD compiler switch is required.
#endif

// MyReusableStaticSingleThreadDebugLibrary.h
#if defined(_MT) || !defined(_DEBUG)
    #error The /MLd compiler switch is required.
#endif

// MyReusableStaticMultithreadDebugLibrary.h
#if !defined(_MT) || defined(_DLL) || !defined(_DEBUG)
    #error The /MTd compiler switch is required.
#endif

// MyReusableDynamicLinkDebugLibrary.h
#if !defined(_MT) || !defined(_DLL) || !defined(_DEBUG)
    #error The /MDd compiler switch is required.
#endif
				

Свойства

Код статьи: 140584 - Последний отзыв: 8 июля 2013 г. - Revision: 5.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual C++ 2.1
  • Microsoft Visual C++ 2.2
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
Ключевые слова: 
kbcrt kbhowto kbmt KB140584 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Данная статья переведена с использованием программного обеспечения Майкрософт для машинного перевода и, возможно, отредактирована посредством технологии Community Translation Framework (CTF). Корпорация Майкрософт предлагает вам статьи, обработанные средствами машинного перевода, отредактированные членами сообщества Майкрософт и переведенные профессиональными переводчиками, чтобы вы могли ознакомиться со всеми статьями нашей базы знаний на нескольких языках. Статьи, переведенные с использованием средств машинного перевода и отредактированные сообществом, могут содержать смысловое, синтаксические и (или) грамматические ошибки. Корпорация Майкрософт не несет ответственности за любые неточности, ошибки или ущерб, вызванные неправильным переводом контента или его использованием нашими клиентами. Подробнее об CTF можно узнать по адресу http://support.microsoft.com/gp/machine-translation-corrections/ru.
Эта статья на английском языке: 140584

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com