올바른 CRT (C 런타임) 라이브러리 연결 방법

중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

140584
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
요약
재사용 가능한 라이브러리를 여섯 가지:
  • (디버그/릴리스) 라이브러리의 정적 단일 스레드
  • 정적 다중 스레드 라이브러리 (디버그/릴리스)
  • 동적 연결 라이브러리 (DLL)(Debug/Release)
참고 각 라이브러리의 디버그 버전과 릴리스 버전 있습니다.

다중 스레드 안전 DLL 수 있으며 단일 스레드 버전의 CRT 라이브러리 DLL에 제공됩니다. 다음 재사용 가능한 라이브러리 또는 라이브러리의 모든 사용자가 여러 스레드를 사용하는 경우 라이브러리의 다중 스레드 안전 라이브러리 형식이어야 합니다.

참고 디버그 라이브러리 및 컴파일러 스위치/MLd,/MTd,/MDd 경우에만 사용할 수 있는 Visual C++ 버전 4.0 이상에서는 있습니다.

다음 표는 각 재사용 가능한 라이브러리 (DLL 형식을 모두 다중 스레드 안전성이 보장되지) 6가지 유형의 구축 어떤 컴파일러 스위치를 사용해야 합니다. 재사용 가능한 라이브러리를 사용하는 모든 프로젝트를 동일한 컴파일러 스위치를 사용해야 합니다. /ML(default) 또는/MDd MLd,/MT, MTd,/MD 컴파일러 스위치를 사용할 때 컴파일러는 라이브러리 열 아래에 나열된 기본 라이브러리 이름을 개체 파일에 배치합니다.
Reusable Library            Switch    Library    Macro(s) Defined----------------------------------------------------------------Single Threaded             /ML       LIBC       (none)Static MultiThread          /MT       LIBCMT     _MTDynamic Link (DLL)          /MD       MSVCRT     _MT and _DLLDebug Single Threaded       /MLd      LIBCD      _DEBUGDebug Static MultiThread    /MTd      LIBCMTD    _DEBUG and _MTDebug Dynamic Link (DLL)    /MDd      MSVCRTD    _DEBUG, _MT, and _DLL				
이 명령을 사용하여 빌드할 때 어떤 스위치를 사용한 확인하려면 개체 모듈이 볼 수 있습니다:
   dumpbin /all <object>.obj				
섹션을 RAW 데이터 # 1 찾는. 기본 라이브러리는 가장 오른쪽 열에 나열됩니다.
추가 정보
재사용 가능한 라이브러리 및 해당 사용자가 모두 같은 CRT 라이브러리 유형 및 같은 컴파일러 스위치를 사용해야 합니다. 매크로가 정의된 (또는 정의되어 있지 않습니다) 적용하는 데 사용될 수 있는 재사용 가능한 라이브러리의 헤더 파일을 스위치 컴파일러 각각에 대해 적절한 컴파일러 스위치. 이 문서의 예제 코드에서는 이러한 매크로를 사용하는 방법을 보여 줍니다.

사용자가 정적 선택할 수 있도록 라이브러리 또는 CRT DLL의 사용하시겠습니까 경우 정적 및 DLL 재사용 가능한 라이브러리의 형식을 제공해야 합니다.

CRT 라이브러리를 함께 선택한 경우 사용자가 어떤 CRT 경계를 넘어 작업을 시도할 것에 대한 있으므로 주의해야 합니다 두 개의 개별 복사본을 별도의 및 고유한 상태의 CRT 있어야 합니다. 다양한 방법으로 두 CRT에서 문제가 데이터를 가져올 수 있습니다. 몇 가지 다음과 같습니다.
  • 두 개의 개별 힙이 있습니다. 할당할 수 없습니다 (새, malloc 명시적으로 함께 또는--또는 암시적으로 strdup, strstreambuf::str, 또는 식으로 그렇게), 다음 포인터를 사용하여 CRT - 해제할 경계를 넘어 전달합니다.
  • CRT 경계를 넘어 FILE 1 또는 파일 핸들을 전달하고 예상할 수 있는 "stdio 저수준 IO" 작동하도록.
  • 한 로캘 설정 및 설정할 수 있는 다른 로캘을 기대할 수 없습니다.
Visual C++ 4.0 시작하는 경우 결과 모듈을 두 개 이상의 복사본을 CRT 라이브러리 결합할 시도할 경우 링커에서는 경고를 LNK4098) 발급합니다. 자세한 내용은 도움말 파일에 대한 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				

경고: 이 문서는 자동으로 번역되었습니다.

속성

문서 ID: 140584 - 마지막 검토: 12/04/2015 12:31:24 - 수정: 3.1

Microsoft Visual C++ 2.0 Professional Edition, Microsoft Visual C++ 2.1, Microsoft Visual C++ 2.2, Microsoft Visual C++ 4.0 Standard Edition, Microsoft Visual C++ 4.0 Standard Edition, Microsoft Visual C++ 4.1 Subscription, Microsoft Visual C++ 4.2 Professional Edition, Microsoft Visual C++ 4.2 Professional Edition, Microsoft Visual C++ 5.0 Standard Edition, Microsoft Visual C++ 6.0 서비스 팩 5, Microsoft Visual C++ .NET 2002 Standard Edition, Microsoft Visual C++ .NET 2003 Standard Edition

  • kbnosurvey kbarchive kbmt kbcrt kbhowto KB140584 KbMtko
피드백