이 문서는 수동으로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오. |
번역
원본
|
/clr(공용 언어 런타임 컴파일)
CLR(공용 언어 런타임)의 기능을 응용 프로그램과 구성 요소에서 사용할 수 있도록 합니다.
/clr[:options]
관리 코드는 CLR로 검사하고 관리할 수 있는 코드입니다. 관리 코드는 관리되는 개체에 액세스할 수 있습니다. 자세한 내용은 /clr 제한을 참조하십시오.
관리되는 형식을 정의하고 사용하는 응용 프로그램을 개발하는 방법에 대한 자세한 내용은 Language Features for Targeting the CLR을 참조하십시오.
/clr을 사용하여 컴파일한 응용 프로그램에는 관리되는 데이터가 포함되거나 포함되지 않을 수 있습니다.
관리되는 응용 프로그램을 디버깅할 수 있도록 하려면 /ASSEMBLYDEBUG(DebuggableAttribute 추가)를 참조하십시오.
가비지 수집된 힙에서는 CLR 형식만 인스턴스화할 수 있습니다. 자세한 내용은 Classes and Structs (Managed)을 참조하십시오. 함수를 네이티브 코드로 컴파일하려면 unmanaged pragma를 사용하십시오. 자세한 내용은 managed, unmanaged을 참조하십시오.
기본적으로 /clr는 설정되어 있지 않습니다. /clr이 적용되면 /MD도 적용됩니다. 자세한 내용은 /MD, /MT, /LD(런타임 라이브러리 사용)을 참조하십시오. /MD는 표준 헤더(.h) 파일에서 런타임 루틴의 동적으로 연결되는 다중 스레드 버전이 선택되었는지 확인합니다. 다중 스레드는 CLR 가비지 수집기가 보조 스레드에서 종료자를 실행하므로 관리되는 프로그래밍에 필요합니다.
/c을 사용하여 컴파일하는 경우 /CLRIMAGETYPE을 사용하여 결과 출력 파일의 CLR 형식(IJW, safe 또는 pure)을 지정할 수 있습니다.
/clr은 /EHa를 함축하고 있으며 다른 /EH 옵션은 /clr에 사용할 수 없습니다. 자세한 내용은 /EH(예외 처리 모델)을 참조하십시오.
파일의 CLR 이미지 형식을 확인하는 방법에 대한 자세한 내용은 /CLRHEADER를 참조하십시오.
링커의 특정 호출에 전달되는 모든 모듈은 동일한 런타임 라이브러리 컴파일러 옵션(/MD 또는 /LD)을 사용하여 컴파일해야 합니다.
어셈블리에 리소스를 포함하려면 /ASSEMBLYRESOURCE 링커 옵션을 사용합니다. /DELAYSIGN, /KEYCONTAINER 및 /KEYFILE 링커 옵션을 사용하여 어셈블리가 작성되는 방식을 사용자 지정할 수도 있습니다.
/clr이 사용되면 _MANAGED 기호는 1로 정의됩니다. 자세한 내용은 Predefined Macros을 참조하십시오.
실행 파일이 DLL인 경우 DllMain을 진행하는 동안 네이티브 개체 파일의 전역 변수가 먼저 초기화된 다음 관리되는 섹션의 전역 변수가 다른 관리 코드를 실행하기 전에 초기화됩니다. #pragmainit_seg는 관리되는 범주 및 관리되지 않는 범주에서 초기화의 순서에만 영향을 줍니다.
/clr:safe로 컴파일하는 것은 C# 등의 언어에서 /platform:anycpu로 컴파일하는 것과 같습니다.
안전 이미지와 순수 이미지
순수 이미지는 CLR 버전의 C 런타임(CRT) 라이브러리를 사용합니다. 그러나 CRT는 안정성을 확인할 수 없으므로 /clr:safe를 사용하여 컴파일할 때는 CRT를 사용할 수 없습니다. 자세한 내용은 C Run-Time Libraries을 참조하십시오.
순수 이미지에 표시할 수 없는 네이티브 코드의 예로는 인라인 어셈블리, setjmp 및 longjmp 등이 있습니다.
순수 이미지나 안전 이미지의 모든 진입점은 관리됩니다. /clr을 사용하여 컴파일하는 경우 진입점은 네이티브입니다. 자세한 내용은 __clrcall을 참조하십시오.
/clr:safe를 사용하여 컴파일하는 경우 기본적으로 변수가 appdomain이고 프로세스당 지정할 수 없습니다. /clr:pure의 경우, appdomain이 기본값이지만 프로세스 변수를 사용할 수 있습니다.
/clr 또는 /clr:pure를 사용하여 컴파일한 32비트 .exe 파일을 64비트 운영 체제에서 실행하는 경우 응용 프로그램은 WOW64에서 실행됩니다. 이렇게 하면 32비트 응용 프로그램을 64비트 운영 체제에서 32비트 CLR을 통해 실행할 수 있습니다. 기본적으로 /clr:safe를 사용하여 컴파일한 .exe 파일은 64비트 운영 체제가 실행되는 컴퓨터에서 64비트 CLR에 실행됩니다. 32비트 운영 체제에서는 동일한 .exe 파일을 32비트 CLR에서 실행합니다. 그러나 안전 응용 프로그램은 32비트 구성 요소를 로드할 수 있습니다. 이 경우 운영 체제의 64비트 지원 기능을 사용하여 실행되는 안전 이미지가 32비트 응용 프로그램을 로드할 때 문제가 발생할 수 있습니다(BadFormatException). 64비트 운영 체제에서 32비트 응용 프로그램을 로드할 때도 안전 이미지가 계속 실행되도록 하려면 /CLRIMAGETYPE을 사용하여 메타데이터(.corflags)를 변경하고 응용 프로그램이 WOW64에서 실행되도록 표시해야 합니다. 다음 명령줄은 예제입니다. 진입점 기호를 적절하게 바꾸십시오.
cl /clr:safe t.cpp /link /clrimagetype:pure /entry:?main@@$$HYMHXZ /subsystem:console
데코레이팅된 이름을 얻는 방법에 대한 자세한 내용은 목록을 사용하여 데코레이팅된 이름 보기을 참조하십시오. 64비트 프로그래밍에 대한 자세한 내용은 Visual C++를 사용한 64비트 프로그래밍을 참조하십시오.
샘플, 연습 및 추가 정보는 다음 항목을 참조하십시오.
메타데이터와 명명되지 않은 클래스
명명되지 않은 클래스는 메타데이터에 $UnnamedClass$crc-of-current-file-name$index$와 같은 형식으로 이름이 지정되어 표시됩니다. 여기에서 index는 컴파일에 포함된 명명되지 않은 클래스의 일련 번호입니다. 예를 들어, 다음 코드 예제는 메타데이터에 명명되지 않은 클래스를 생성합니다.
// clr_unnamed_class.cpp
// compile by using: /clr /LD
class {} x;
메타데이터를 보려면 ildasm.exe를 사용합니다.
Visual Studio에서 이 컴파일러 옵션을 설정하려면
솔루션 탐색기에서 프로젝트 이름을 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭하여 프로젝트 속성 페이지 대화 상자를 엽니다.
구성 속성 폴더를 선택합니다.
일반 속성 페이지에서 공용 언어 런타임 지원 속성을 수정합니다.
참고속성 페이지 대화 상자에서 /clr을 사용하도록 설정한 경우, /clr과 호환되지 않는 컴파일러 옵션 속성이 필요에 따라 적절히 조정됩니다. 예를 들어, /RTC를 설정한 다음 /clr를 활성화하면 /RTC가 자동으로 해제됩니다.
또한 /clr 응용 프로그램을 디버그하는 경우 디버거 형식 속성을 혼합 또는 관리 전용으로 설정합니다. 자세한 내용은 C++ 디버그 구성에 대한 프로젝트 설정을 참조하십시오.
모듈을 만드는 방법에 대한 자세한 내용은 /NOASSEMBLY(MSIL 모듈 만들기)를 참조하십시오.
프로그래밍 방식으로 이 컴파일러 옵션을 설정하려면
CompileAsManaged를 참조하십시오.