/kernel (Create Kernel Mode Binary)
Windows 커널에서 실행 될 수 있는 이진 파일을 만듭니다.
/kernel[-]
인수
/kernel
현재 프로젝트의 코드를 컴파일하여 커널 모드에서 실행 되는 코드는 c + + 언어 규칙 집합을 사용 하 여 연결 합니다./kernel-
현재 프로젝트의 코드를 컴파일하고 커널 모드에서 실행 되는 코드는 c + + 언어 규칙을 사용 하지 않고 연결 합니다.
설명
없는 없음 #pragma 해당 하는이 옵션을 제어 합니다.
지정 하는 /kernel 옵션을 사용 하면 컴파일러와 런타임이 불안정을 방지 하기 위해 충분 한 표현 능력 있다고는 커널 모드 c + + 에서만 사용할 수 있음을 링커에 언어 기능을 커널 모드에서 허용 됩니다 중재 하 고 있는지 확인 합니다.이 커널 모드에 방해가 되는 c + + 언어 기능의 사용을 금지 하 고 잠재적으로 파괴적 이지만 해제할 수 없는 c + + 언어 기능에 대 한 경고를 제공 하 여 수행 됩니다.
/kernel 옵션은 컴파일러와 링커는 빌드 단계에 적용 되며 프로젝트 수준에서 설정 됩니다.전달 된 /kernel 스위치 컴파일러에 이진 결과가 연결 후 Windows 커널에 로드 해야 함을 나타냅니다.컴파일러는 c + + 언어 기능을 커널에 호환 되는 하위 집합의 스펙트럼을 점점 줄어듭니다.
다음 표에서 컴파일러 동작 변경 하면 /kernel 지정 된.
동작 유형 |
/kernel동작 |
---|---|
C + + 예외 처리 |
사용 안 함모든 인스턴스는 throw 및 try 키워드는 컴파일러 오류를 생성 (예외 사양을 제외 하 고 throw()).더 /EH 옵션은 호환 /kernel를 제외 하 고 /EH-. |
RTTI |
사용 안 함모든 인스턴스는 dynamic_cast 및 typeid 키워드 하지 않으면 컴파일러 오류를 생성 dynamic_cast 정적으로 사용 됩니다. |
new 및 delete |
명시적으로 정의 해야 하는 new() 또는 delete() 연산자. 컴파일러와 런타임 모두 기본 정의 제공 합니다. |
호출 규칙을 사용자 지정의 /GS 빌드 옵션 및 모든 최적화를 사용 하면 허용 된 /kernel 옵션.인라이닝 된 거의 받지 여 /kernel, 적용은 컴파일러에 의해 동일한 의미 체계를.있는지 확인 하려는 경우를 __forceinline 는 인라인 한정자를 적용 하 고 해당 경고가 있는지 확인 해야 C4714 특정 한 때를 알 수 있도록 가능 __forceinline 함수를 인라인 하지 않습니다.
컴파일러에 전달 되는 /kernel 미리 스위치는 정의 라는 전처리기 매크로 _KERNEL_MODE 및 값이 1.이 코드는 실행 환경이 사용자 모드 또는 커널 모드 인지 여부에 따라 조건부로 컴파일할 수 있습니다.예를 들어, 다음 코드 커널 모드 실행에 대 한 컴파일할 때 클래스 페이징할 수 없는 메모리 세그먼트에 되도록 지정 합니다.
#ifdef _KERNEL_MODE
#define NONPAGESECTION __declspec(code_seg("$kerneltext$"))
#else
#define NONPAGESECTION
#endif
class NONPAGESECTION MyNonPagedClass
{
};
일부 대상 아키텍처의 조합은 다음 및 /arch 옵션을 사용 하는 경우 오류가 생성 /kernel.
**/arch:{SSE|SSE2|AVX}**x 86에서 지원 되지 않습니다.만 /arch:IA32 지원 됩니다 /kernel x86.
/arch:AVX지원 되지 않는 /kernel x 64에서.
만들기 위한 /kernel 전달 또한 /kernel 링커에 있습니다.그녀는이 링커 동작에 미치는 영향입니다.
증분 링크 하는 것이 불가능 합니다.추가 하는 경우 /incremental 명령줄에 링커에서이 심각한 오류를 표시 합니다.
LINK : fatal error LNK1295: '/INCREMENTAL' not compatible with '/KERNEL' specification; link without '/INCREMENTAL'
링커를 사용 하 여 컴파일 되었는지 수 여부를 확인할 수는 각 개체 파일 (또는 정적 라이브러리에서 포함 된 아카이브 멤버) 검사는 /kernel 옵션을 있지만 되었습니다.모든 인스턴스는이 조건을 만족 하는 경우 링커는 성공적으로 링크 되지만 경고는 다음 표에서 같이 발생할 수 있습니다.
/kernelobj
/kernel-obj, MASM obj 또는 cvtresed
Mix of /kernel and /kernel- objs
/kernel 링크
예
예
예 경고 LNK4257
link
예
예
예
LNK4257 linking object not compiled with /KERNEL ; image may not run
/kernel 옵션 및 /driver 옵션 작동 독립적으로 하 고 모두 다른 영향을 미칩니다.
Visual Studio /kernel 컴파일러 옵션을 설정 하려면
프로젝트의 속성 페이지 대화 상자를 엽니다.자세한 내용은 방법: 프로젝트 속성 페이지 열기을 참조하십시오.
선택 된 C/c + + 폴더입니다.
선택 된 명령줄 속성 페이지입니다.
에 추가 옵션 상자에서 추가 /kernel 또는 /kernel-.