Aracılığıyla paylaş


/kernel (Create Kernel Mode Binary)

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

/kernel[-]

Değişkenler

  • /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

Yok yok #pragma bu seçeneği kontrol etmek için eşdeğer.

Belirtme /kernel seçeneği, derleyici ve çalışma zamanı kararsızlık önlemek için etkileyici yeterli güç olması, çekirdek modu c++ için benzersiz olduğundan ve bağlayıcı hangi dil özellikleri çekirdek modunda bulunmadığı kalkarsa ve emin olmak için söyler.Bu uyarılar için potansiyel olarak dağıtıldığından, ancak devre dışı bırakılamaz c++ dil özellikleri sağlayan ve çekirdek modunda bozucudur c++ dil özellikleri kullanımını yasaklamaktadır 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 dil özellikleri c++ tayfını kısaltacaktır.

Derleyici davranış değişiklikleri aşağıdaki tabloda listelenmiştir, /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 yayma 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ı Yayımla dynamic_cast statik olarak kullanılır.

new ve delete

Açıkça tanımlamanız gerekir new() veya delete() işleç; Derleyici ya da çalışma zamanı varsayılan tanımını kullanacaksınız.

Özel arama kuralları, /gs yapı seçeneği ve tüm en iyi duruma getirme başarısının kullandığınızda /kernel seçeneği.Inlining büyük ölçüde etkilenmez tarafından /kernel, derleyici tarafından kabul edilip ödenmiş aynı mantığı ile.Emin olmak istiyorsanız, __forceinline katıştırarak niteleyici kabul edilip ödenmiş, bu uyarı emin olun C4714 , belirli bir zaman bildiğinize etkin __forceinline işlev inlined değil.

Derleyici geçirilen ne zaman /kernel önceden anahtarı, onu belirler adlı bir önişlemci makrosunu _KERNEL_MODE ve değere sahip 1.Çekirdek modu veya kullanıcı modu yürütme ortamı mı olduğuna bağlı kodu koşullu derlemektir için bunu kullanabilirsiniz.Örneğin, aşağıdaki kod sınıfı için çekirdek modu yürütme derlendiğinde alınamayan bellek kesimi içinde 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 desteklenmeyen /kernel x 64 üzerinde.

Oluşturma ile /kernel de geçen /kernel için bağlayıcı.Bu bağlayıcı davranışını nasıl etkilediğini Filiz'e şöyledir:

  • Artımlı bağlama devre dışıdır.Eklerseniz /incremental komut satırına, bağlayıcı bu önemli bir hata gösterir:

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

  • Bunu kullanarak derlendiği olup olmadığını görmek için her nesne dosyası (veya herhangi bir statik kitaplıkları dahil arşiv üyeden) bağlayıcı incelerken /kernel seçeneği ancak değildi.Tüm örnekleri bu ölçüte uyan, bağlayıcı yine de 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

    link

    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ışır ve hiçbiri diğerini etkiler.

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

  1. Açık Özellik sayfaları Proje iletişim kutusu.Daha fazla bilgi için bkz. Nasıl yapılır: Proje özellik sayfalarını açın.

  2. Seçin c/c++ klasör.

  3. Seçin komut satırı özellik sayfası.

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

Ayrıca bkz.

Başvuru

Derleme Seçenekleri

Derleyici seçeneklerini ayarlama