/kernel (Çekirdek modu ikilisi oluştur)
Windows çekirdeğinde yürütülebilecek bir ikili oluşturur. Geçerli projedeki kod derlenir ve çekirdek modunda çalışan koda özgü basitleştirilmiş bir C++ dil özellikleri kümesi kullanılarak bağlanır.
Sözdizimi
/kernel
Açıklamalar
seçeneğinin /kernel
belirtilmesi, derleyiciye ve bağlayıcıya çekirdek modunda izin verilen dil özelliklerini rastgele belirlemesini ve C++ çekirdek modu için benzersiz çalışma zamanı kararsızlığını önlemek için yeterli ifade gücüne sahip olduğunuzdan emin olmasını bildirir. Çekirdek modunda kesintiye neden olan C++ dil özelliklerinin kullanımını yasaklayarak yapılır. Derleyici, kesintiye neden olabilecek ancak devre dışı bırakılabilen C++ dil özellikleri için uyarılar üretir.
seçeneği, /kernel
derlemenin hem derleyici hem de bağlayıcı aşamaları için geçerlidir ve proje düzeyinde ayarlanır. /kernel
Derleyiciye bağlantıdan sonra elde edilen ikili dosyanın Windows çekirdeğine yüklenmesi gerektiğini belirtmek için anahtarını geçirin. Derleyici, C++ dil özelliklerinin spektrumunu çekirdekle uyumlu bir alt kümeye daraltır.
Aşağıdaki tabloda, belirtildiğinde /kernel
derleyici davranışındaki değişiklikler listeleniyor.
Davranış türü | /kernel davranış |
---|---|
C++ özel durum işleme | Devre dışı. ve try anahtar sözcüklerinin throw tüm örnekleri bir derleyici hatası (özel durum belirtimi throw() dışında) yayar. dışında /EH- hiçbir seçenek ile /kernel uyumlu değildir/EH . |
RTTI | Devre dışı. ve typeid anahtar sözcüklerinin dynamic_cast tüm örnekleri, statik olarak kullanılmadığı sürece dynamic_cast bir derleyici hatası gösterir. |
new ve delete |
veya delete() işlecini new() açıkça tanımlamanız gerekir. Derleyici ve çalışma zamanı varsayılan bir tanım sağlamaz. |
Özel çağrı kuralları, /GS
derleme seçeneği ve seçeneği kullandığınızda /kernel
tüm iyileştirmelere izin verilir. Inlining, derleyici tarafından aynı semantikle büyük ölçüde etkilenmez /kernel
. Çizili niteleyicinin yerine getirildiğinden __forceinline
emin olmak istiyorsanız, belirli __forceinline
bir işlevin ne zaman çizili olmadığını bilmeniz için C4714 uyarısının etkinleştirildiğinden emin olmanız gerekir.
Bu seçeneği denetlemenin eşdeğeri yoktur #pragma
.
Derleyiciye anahtar geçirildiğinde/kernel
, adlı _KERNEL_MODE
ve 1 değerine sahip bir önişlemci makroyu önceden tanımlar. Yürütme ortamının kullanıcı modunda mı yoksa çekirdek modunda mı olduğuna bağlı olarak kodu koşullu olarak derlemek için bu makroyu kullanabilirsiniz. Örneğin aşağıdaki kod, çekirdek modu yürütmesi için derlendiğinde sınıfın MyNonPagedClass
disk belleğine alınamayan bir bellek kesiminde olması gerektiğini belirtir.
#ifdef _KERNEL_MODE
#define NONPAGESECTION __declspec(code_seg("$kerneltext$"))
#else
#define NONPAGESECTION
#endif
class NONPAGESECTION MyNonPagedClass
{
// ...
};
Aşağıdaki hedef mimari birleşimlerinden bazıları ve /arch
seçeneği ile /kernel
kullanıldığında bir hata oluşturur:
/arch:SSE
,/arch:SSE2
,/arch:AVX
,/arch:AVX2
ve/arch:AVX512
x86'da desteklenmez. Yalnızca/arch:IA32
x86 üzerinde ile/kernel
desteklenir./arch:AVX
,/arch:AVX2
ve/arch:AVX512
x64 üzerinde ile/kernel
desteklenmez.
ile derleme /kernel
, bağlayıcıya da geçer /kernel
. Bu seçenek bağlayıcı davranışını şu şekilde etkiler:
Artımlı bağlama devre dışı bırakıldı. Komut satırına eklerseniz
/incremental
bağlayıcı şu önemli hatayı gösterir:önemli hata LNK1295: '/INCREMENTAL' '/KERNEL' belirtimi ile uyumlu değil; '/INCREMENTAL' olmadan bağlantı
Bağlayıcı, her nesne dosyasını (veya statik kitaplıklardan dahil edilen arşiv üyelerini) inceleyerek seçeneği kullanılarak
/kernel
derlenip derlenmediğini ancak derlenmediğini denetler. Herhangi bir örnek bu ölçüte uyuyorsa, bağlayıcı yine de başarıyla bağlanır ancak aşağıdaki tabloda gösterildiği gibi bir uyarı verebilir.Command /kernel
Objnon- /kernel
obj, MASM obj veya cvtres obj/kernel
Ve olmayan/kernel
obj'lerin karışımılink /kernel
Yes Yes Evet uyarı LNK4257 link
Yes Evet Yes /KERNEL ile derlenmemiş nesne bağlama LNK4257; görüntü çalışmayabilir
/kernel
seçeneği ve /driver
seçeneği bağımsız olarak çalışır. Birbirleri üzerinde hiçbir etkisi yoktur.
Visual Studio'da /kernel derleyicisi seçeneğini ayarlamak için
Proje için Özellik Sayfaları iletişim kutusunu açın. Daha fazla bilgi için bkz . Visual Studio'da C++ derleyicisi ve derleme özelliklerini ayarlama.
Yapılandırma Özellikleri>C/C++>Komut Satırı özellik sayfasını seçin.
Ek seçenekler kutusuna ekleyin
/kernel
. Değişikliklerinizi kaydetmek için Tamam'ı veya Uygula'yı seçin.
Ayrıca bkz.
MSVC Derleyicisi Seçenekleri
MSVC Derleyicisi Komut Satırı Söz Dizimi