/kernel (vytvoření binárního režimu jádra)
Vytvoří binární, které mohou být provedeny v jádru systému Windows.
/kernel[-]
Arguments
/kernel
Kódu v aktuálním projektu je zkompilován a propojen pomocí sady pravidla jazyka C++, které jsou specifické pro kód, který bude spuštěn v režimu jádra./kernel-
Kódu v aktuálním projektu je zkompilován a propojeny bez použití pravidel jazyka C++, které jsou specifické pro kód, který bude spuštěn v režimu jádra.
Poznámky
Neexistuje žádný ekvivalent #pragma pro ovládání této možnosti.
Zadání /kernel možnost říká kompilátoru a propojovacího programu přidělení žádá funkcí jazyka, které jsou přípustné v režimu jádra a ujistěte se, že zda máte dostatečný výkon výrazové, aby se zabránilo runtime nestability který je jedinečný pro režim jádra jazyka C++.Toho je dosaženo zákazem používání funkcí jazyka C++, které jsou v režimu jádra rušivé a poskytnutím upozornění funkcí jazyka C++, které jsou potenciálně nebezpečné, ale nemůže být zakázán.
/kernel Možnost se vztahuje na fáze v kompilátoru a propojovacího programu sestavení a je nastavena na úrovni projektu.Předat /kernel přepínač označíte kompilátoru, že výsledný binární soubor po propojení, by měla být načtena do jádra systému Windows.Kompilátor bude zúžit spektrum funkcí jazyka C++ dílčí, která je kompatibilní s jádra.
V následující tabulce jsou uvedeny změny v chování kompilátoru při /kernel je zadán.
Typ chování |
/kernelChování |
---|---|
Zpracování výjimek C++ |
Zakázané.Všechny výskyty throw a try Chyba kompilátoru generovat klíčová slova (kromě výjimek specifikace throw()).Ne /EH možnosti, které jsou kompatibilní s /kernel, s výjimkou /EH-. |
RTTI |
Zakázané.Všechny výskyty dynamic_cast a typeid klíčových slov generuje chybu kompilátoru, pokud dynamic_cast se používá staticky. |
new a delete |
Je nutné explicitně definovat new() nebo delete() provozovatele; Kompilátor ani modul runtime poskytne výchozí definice. |
Vlastní konvence, volání /GS možnost sestavení a všechny optimalizace jsou povoleny při použití /kernel možnost.Vkládání je z velké části nejsou ovlivněny /kernel, s časopisem kompilátor stejnou sémantiku.Pokud chcete zajistit, aby __forceinline je odměněno vkládání kvalifikátor, ujistěte se, že upozornění C4714 je povoleno, aby vás upozorní na konkrétní __forceinline funkce není vložená.
Pokud je předán kompilátor /kernel přepínač predefines preprocesor makro s názvem _KERNEL_MODE a má hodnotu 1.To můžete použít podmíněné kompilace kódu podle toho, zda je prostředí pro spouštění v režimu jádra nebo uživatelského režimu.Například následující kód určuje, že třída by měla být v segmentu nestránkovatelné paměti při je zkompilován spustitelný režim jádra.
#ifdef _KERNEL_MODE
#define NONPAGESECTION __declspec(code_seg("$kerneltext$"))
#else
#define NONPAGESECTION
#endif
class NONPAGESECTION MyNonPagedClass
{
};
Některé následující kombinace cílové architektury a /arch možnost dojít k chybě, pokud jsou používány s /kernel:
**/arch:{SSE|SSE2|AVX}**na x 86 nejsou podporovány.Pouze /arch:IA32 je podporován s /kernel na x 86.
/arch:AVXnení podporován s /kernel na platformě x 64.
Sestavení s /kernel také předává /kernel do propojovacího programu.Jí je, jak to ovlivňuje chování propojovacího programu:
Přírůstkové propojování zakázáno.Přidáte-li /incremental na příkazovém řádku propojovacího programu vyzařuje Tato závažná chyba:
LINK : fatal error LNK1295: '/INCREMENTAL' not compatible with '/KERNEL' specification; link without '/INCREMENTAL'
Propojovací program kontroluje každý soubor objektu (nebo kterýkoli člen součástí archivu ze statických knihoven), chcete-li zjistit, zda jej může být zkompilován s použitím /kernel možnost ale nebyl.Pokud všechny instance splňují toto kritérium, propojovací program stále úspěšně propojení však může vydat upozornění, jak je znázorněno v následující tabulce.
/kernelobj
/kernel-obj, MASM obj nebo cvtresed
Mix of /kernel and /kernel- objs
Kernel odkaz
Ano
Ano
Ano s LNK4257 upozornění
odkaz
Ano
Ano
Ano
LNK4257 linking object not compiled with /KERNEL ; image may not run
/kernel Možnost a /driver možnost pracovat samostatně a ani se navzájem ovlivňují.
Chcete-li nastavit možnost kompilátoru/Kernel v sadě Visual Studio
Otevřete dialogové okno Stránky vlastností projektu.Další informace naleznete v tématu Postupy: Otevření stránek vlastností projektu.
Vyberte složku C/C++.
Vyberte stránku vlastností Příkazový řádek.
V Další možnosti pole, přidejte kernel nebo /kernel-.