Aracılığıyla paylaş


/kernel (Çekirdek Modu İkilisi Oluştur)

Windows Çekirdeği'nde yürütülen bir ikili oluşturur.

/kernel[-]

Arguments

  • /kernel
    Geçerli projedeki kod derlenir ve C++ dili, çekirdek modunda çalıştırılan kod için özel bir kurallar kümesi kullanarak bağlı.

  • /kernel-
    Geçerli projedeki kod derlenir ve çekirdek modunda çalıştırılan kod özgü C++ dil kurallarına kullanmadan bağlı.

Notlar

Bu seçimi denetlemek için #pragma eşdeğeri yoktur.

Belirtme /kernel seçeneği, derleyici ve çalışma zamanı kararsızlık önlemek için açıklayıcı yeterli güç olması, çekirdek modu C++ benzersiz olduğunu bağlayıcı hangi dil özellikleri çekirdek modunda izin verilen yönetmeye kalkarsa ve emin olmak için söyler.Bu, çekirdek modunda dağıtıldığından C++ dil özellikleri kullanımını yasaklanması ve potansiyel olarak dağıtıldığından, ancak devre dışı bırakılamaz C++ dil özellikleri için uyarılar sağlamak tarafından gerçekleştirilir.

/kernel Seçeneği bir yapı derleyici ve bağlayıcı aşamaları için geçerlidir ve proje düzeyinde ayarlanır.Pass /kernel elde edilen ikili bağladıktan sonra Windows çekirdeğinin yükleneceğini derleyiciye belirtmek için anahtar.Derleyici, çekirdek ile uyumlu olan bir alt C++ dil özellikleri tayfını sınırlar.

Derleyici davranış değişiklikleri aşağıdaki tabloda listelenmiştir zaman /kernel belirtilir.

Davranış türü

/kernelDavranış

C++ özel durum işleme

Devre dışı bırakılmış.Tüm örneklerini throw ve try anahtar sözcükler yayması derleyici hatası (özel durum belirtimi dışında throw()).Hayır /EH seçenekleri ile uyumlu /kernel, dışında /EH-.

RTTI

Devre dışı bırakılmış.Tüm örneklerini dynamic_cast ve typeid anahtar sözcükler sürece bir derleyici hatası yayması dynamic_cast statik olarak kullanılır.

new ve delete

Açıkça tanımlamak gerekir new() veya delete() işleç; bir varsayılan tanımı, derleyici ya da çalışma zamanı sağlayacak.

Arama kuralları, özel /GS yapı seçeneği ve tüm en iyi duruma getirmeleri izin verilir kullandığınızda /kernel seçeneği.Katıştırarak büyük ölçüde etkilenmez tarafından /kernel, derleyici tarafından dikkate aynı mantığı ile.Emin olmak isterseniz, __forceinline katıştırarak niteleyici dikkate, bu uyarı emin olun C4714 , belirli bir zaman ve böylece etkin __forceinline işlev içermesinden değil.

Derleyici geçirilen zaman /kernel anahtarı, onu önceden belirler adlı bir önişlemci makrosunu _KERNEL_MODE ve değeri olan 1.Bu kod yürütme ortamı kullanıcı modunda veya çekirdek modunda olduğuna bağlı olarak koşullu olarak derleme için kullanabilirsiniz.Örneğin, aşağıdaki kod için çekirdek modu yürütme derlendiğinde sınıf alınamayan bellek bölütü olması gerektiğini belirtir.

#ifdef _KERNEL_MODE
#define NONPAGESECTION __declspec(code_seg("$kerneltext$"))
#else
#define NONPAGESECTION
#endif

class NONPAGESECTION MyNonPagedClass
{

};

Bazı aşağıdaki bileşimlerinden birini hedef mimari ve /arch seçeneği ile birlikte kullanıldığında bir hata üretmek /kernel:

  • **/arch:{SSE|SSE2|AVX}**x 86 üzerinde desteklenmez.Yalnızca /arch:IA32 ile desteklenen /kernel x 86.

  • /arch:AVXile desteklenmiyor /kernel x 64.

İle oluşturma /kernel de geçiyor /kernel için bağlayıcı.Her bu bağlayıcı davranışını etkilemesi şöyledir:

  • Artımlı bağlama devre dışıdır.Ekleyip /incremental komut satırı için bağlayıcı bu önemli bir hata gösterir:

    LINK : fatal error LNK1295: '/INCREMENTAL' not compatible with '/KERNEL' specification; link without '/INCREMENTAL'

  • Bunu kullanarak derlenen olup olmadığını görmek için her nesne dosyası (veya herhangi bir statik kitaplıklarından dahil arşiv üyesi) bağlayıcı inceler /kernel seçeneği ancak değildi.Tüm örnekleri bu ölçüte uyan bağlayıcı yine başarılı bir şekilde bağlantı ancak aşağıdaki tabloda gösterildiği gibi bir uyarı vermek.

    /kernelobj

    /kernel-obj, MASM obj ya da cvtresed

    Mix of /kernel and /kernel- objs

    bağlantı/Kernel

    Evet

    Evet

    Uyarı LNK4257 ile Evet

    bağlantı

    Evet

    Evet

    Evet

    LNK4257 linking object not compiled with /KERNEL ; image may not run

/kernel Seçeneği ve /driver seçeneği bağımsız olarak çalışan ve her ikisi de diğerini etkiler.

Visual Studio'da/Kernel derleyici seçeneğini ayarlamak için

  1. Proje için Özellik Sayfaları iletişim kutusunu açın.Daha fazla bilgi için bkz. Nasıl Yapılır: Proje Özellik Sayfalarını Açma.

  2. C/C++ klasörünü seçin.

  3. Komut Satırı özellik sayfasını seçin.

  4. İçinde ek seçenekler kutusunda, eklemek /Kernel veya /kernel-.

Ayrıca bkz.

Başvuru

Derleyici Seçenekleri

Derleyici Seçeneklerini Ayarlama