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

기술 자료 번역 기술 자료 번역
기술 자료: 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     _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
				
섹션을 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
				

속성

기술 자료: 140584 - 마지막 검토: 2004년 7월 1일 목요일 - 수정: 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
키워드:?
kbmt kbcrt kbhowto KB140584 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

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