Sdílet prostřednictvím


/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

  1. Otevřete dialogové okno Stránky vlastností projektu.Další informace naleznete v tématu Postupy: Otevření stránek vlastností projektu.

  2. Vyberte složku C/C++.

  3. Vyberte stránku vlastností Příkazový řádek.

  4. V Další možnosti pole, přidejte kernel nebo /kernel-.

Viz také

Referenční dokumentace

Možnosti kompilátoru

Nastavení možností kompilátoru