Aracılığıyla paylaş


Kodunuzu Evrensel CRT’ye yükseltme

Microsoft C Çalışma Zamanı Kitaplığı (CRT), Visual Studio 2015'te yeniden düzenlenmiştir. Standart C Kitaplığı, POSIX uzantıları ve Microsoft'a özgü işlevler, makrolar ve genel değişkenler, Evrensel C Çalışma Zamanı Kitaplığı (Evrensel CRT veya UCRT) adlı yeni bir kitaplığa taşındı. CRT'nin derleyiciye özgü bileşenleri yeni bir vcruntime kitaplığına taşındı.

UCRT artık bir Windows bileşenidir ve Windows 10 ve sonraki sürümlerin bir parçası olarak kullanıma sağlanır. UCRT, C çağrı kurallarına dayalı kararlı bir ABI'yi destekler ve yalnızca birkaç özel durumla ISO C99 standardına yakın şekilde uyumludur. Artık derleyicinin belirli bir sürümüne bağlı değildir. UCRT'yi Visual Studio 2015 veya Visual Studio 2017 tarafından desteklenen herhangi bir Windows sürümünde kullanabilirsiniz. Bunun avantajı, visual studio'nun her yükseltmesiyle artık derlemelerinizi CRT'nin yeni bir sürümünü hedefleyebilecek şekilde güncelleştirmenize gerek olmamasıdır.

Bu yeniden düzenleme, birçok CRT üst bilgi dosyasının, kitaplık dosyasının ve Yeniden dağıtılabilir dosyaların adlarını veya konumlarını ve kodunuz için gereken dağıtım yöntemlerini değiştirdi. UCRT'deki birçok işlev ve makro da standartlara uyumluluğu geliştirmek için eklendi veya değiştirildi. Bu değişikliklerden yararlanmak için mevcut kod ve proje derleme sistemlerinizi güncelleştirmeniz gerekir.

Evrensel CRT dosyaları nerede bulunur?

Bir Windows bileşeni olarak, UCRT kitaplık dosyaları ve üst bilgileri artık Windows yazılım geliştirme setinin (SDK) bir parçasıdır. Visual Studio'yu yüklediğinizde, UCRT'yi kullanmak için gereken Windows SDK'sının bölümleri de yüklenir. Visual Studio yükleyicisi, UCRT üst bilgileri, kitaplıkları ve DLL dosyalarının konumlarını Visual Studio proje derleme sistemi tarafından kullanılan varsayılan yollara ekler. Visual Studio C++ projelerinizi güncelleştirdiğinizde, varsayılan proje ayarlarını kullanırlarsa, IDE üst bilgi dosyaları için yeni konumları otomatik olarak bulur. Bağlayıcı otomatik olarak yeni varsayılan UCRT ve vcruntime kitaplıklarını kullanır. Benzer şekilde, komut satırı derlemeleri yapmak için Bir Geliştirici komut istemi kullanırsanız, üst bilgiler ve kitaplıklar için yollar içeren ortam değişkenleri de güncelleştirilir ve otomatik olarak çalışır.

Standart C Kitaplığı üst bilgi dosyaları artık Windows SDK'sında SDK sürümüne özgü dizindeki bir ekleme klasöründe bulunur. Üst bilgi dosyaları için tipik bir konum, altında Windows Kits\10\Include\[sdk-version]\ucrtProgram Dosyaları veya Program Dosyaları (x86) dizinindedir; burada [sdk-version] Windows 10'un Yıldönümü Güncelleştirmesi için 10.0.14393.0 gibi bir Windows sürümüne veya güncelleştirmesine karşılık gelir.

UCRT statik kitaplıkları ve dinamik bağlantı saplama kitaplıkları, altında Program Dosyaları veya Program Dosyaları (x86) dizininde Windows Kits\10\Lib\[sdk-version]\ucrt\[architecture]bulunur; burada architecture ARM64, x86 veya X64'tür. Perakende ve hata ayıklama statik kitaplıkları libucrt.lib ve libucrtd.libve UCRT DLL'leri için kitaplıklar ve ucrtd.libşeklindedirucrt.lib.

Perakende ve hata ayıklama UCRT DLL'leri ayrı konumlarda bulunur. Perakende DLL'leri Yeniden Dağıtılabilir dosyalardır ve altındaki Program Dosyaları veya Program Dosyaları (x86) dizininde Windows Kits\10\Redist\ucrt\DLLs\[architecture]\bulunabilir. Hata ayıklama UCRT kitaplıkları Yeniden dağıtılabilir dosyalar değildir ve klasör altındaki Windows Kits\10\bin\[architecture]\ucrt Program Dosyaları veya Program Dosyaları (x86) dizininde bulunabilir.

Standart kitaplıkları ve üst bilgileri nerede bulabilirim?

C ve C++ derleyiciye özgü çalışma zamanı destek kitaplığı, vcruntimeprogram başlatmayı desteklemek için gereken kodu ve özel durum işleme ve iç bilgiler gibi özellikleri içerir. Kitaplık ve üst bilgi dosyaları, Program Dosyaları veya Program dosyaları (x86) dizininizdeki sürüme özgü Microsoft Visual Studio klasöründe bulunur.

Visual Studio 2017, 2019 ve 2022'de üst bilgi dosyaları altında Microsoft Visual Studio\[year]\[edition]\VC\Tools\MSVC\[lib-version]\includebulunur. Burada Visual [year] Studio sürümü, [edition] Visual Studio sürümü veya takma adıdır ve [lib-version] kitaplıkların derleme sürümüdür.

Bağlantı kitaplıkları altında Microsoft Visual Studio\[year]\[edition]\VC\Tools\MSVC\[lib-version]\lib\[architecture]bulunur; burada [year] Visual Studio sürümüdür, [edition] Visual Studio'nun sürümü veya takma adıdır, [lib-version] kitaplıkların derleme sürümüdür ve [architecture] hedef işlemci mimarisidir. OneCore ve Mağaza için bağlantı kitaplıkları kitaplıklar klasöründe de bulunur.

Statik kitaplığın perakende ve hata ayıklama sürümleri ve libvcruntimed.libşeklindedirlibvcruntime.lib. Dinamik bağlantı perakende ve hata ayıklama saplama kitaplıkları sırasıyla ve vcruntimed.libşeklindedirvcruntime.lib.

Visual Studio C++ projelerinizi güncelleştirdiğinizde, projenin Bağlayıcı özelliğini Tüm Varsayılan Kitaplıkları Yoksay Seçeneğini Evet olarak ayarladıysanız veya komut satırında bağlayıcı seçeneğini kullanırsanız/NODEFAULTLIB, kitaplık listenizi yeni, yeniden düzenlenmiş kitaplıkları içerecek şekilde güncelleştirmeniz gerekir. Eski CRT kitaplığını (örneğin, libcmt.lib, libcmtd.lib, msvcrt.libveya msvcrtd.lib) eşdeğer yeniden düzenlenmiş kitaplıklarla değiştirin. Kullanılacak belirli kitaplıklar hakkında bilgi için bkz . CRT kitaplık özellikleri.

Evrensel CRT'nin dağıtımı ve yeniden dağıtımı

UCRT artık bir Microsoft Windows işletim sistemi bileşeni olduğundan, Windows 10 ve sonraki sürümlerde işletim sisteminin bir parçası olarak dahil edilir. Eski işletim sistemleri için Windows Update, Windows Vista ile Windows 8.1 arasında kullanılabilir. Windows XP için yeniden dağıtılabilir bir sürüm mevcuttur. bir işletim sistemi bileşeni olarak, UCRT güncelleştirmeleri ve hizmetleri Visual Studio ve Microsoft C++ derleyici sürümlerinden bağımsız olarak Windows Update tarafından yönetilir. UCRT, güvenlik ve güncelleştirme kolaylığı ve daha küçük bir görüntü boyutu için bir Windows bileşeni olduğundan, uygulamanız için UCRT'nin merkezi dağıtımını yapmak için Yeniden Dağıtılabilir paketini kullanmanızı kesinlikle öneririz.

UCRT'yi Visual Studio 2015 veya üzeri tarafından desteklenen herhangi bir Windows sürümünde kullanabilirsiniz. Windows 10'un desteklenen sürümleri için bir vcredist paket kullanarak yeniden dağıtabilirsiniz. Paketler vcredist UCRT bileşenlerini içerir ve bunları varsayılan olarak yüklü olmayan Windows işletim sistemlerine otomatik olarak yükler. Daha fazla bilgi için bkz . Visual C++ Dosyalarını Yeniden Dağıtma.

UCRT'nin uygulama yerel dağıtımı desteklenir, ancak hem performans hem de güvenlik nedeniyle önerilmez. UCRT'nin uygulama yerel dağıtımına yönelik DLL'ler, Windows SDK'sının bir parçası olarak alt dizinin altına redist eklenir. Gerekli DLL'ler ve adlı api-ms-win-[subset].dllbir DIZI APISet ileticisi DLL'sini içerirucrtbase.dll. Her işletim sisteminde gereken DLL kümesi farklılık gösterdiğinden, uygulama yerel dağıtımını kullanırken tüm DLL'leri eklemenizi öneririz. Uygulama yerel dağıtımı hakkında daha fazla bilgi ve öneri için bkz . Visual C++'da dağıtım.

Evrensel CRT işlevlerinde ve makrolarında yapılan değişiklikler

ISO C99 uyumluluğunun geliştirilmesi ve kod kalitesi ile güvenlik sorunlarının giderilmesi için UCRT'ye birçok işlev eklendi veya güncelleştirildi. Bazı durumlarda, bu kitaplıkta hataya neden olan değişiklikler gerektiriyor. CRT'nin eski bir sürümünü kullanırken temiz bir şekilde derlenen kodunuz, UCRT kullanarak derlendiğinde bozulabilir. Bu durumda, UCRT güncelleştirmelerinden ve özelliklerinden yararlanmak için kodunuzu değiştirmeniz gerekir. Evrensel CRT'de bulunan CRT'de hataya neden olan değişikliklerin ve güncelleştirmelerin ayrıntılı listesi için Visual C++ değişiklik geçmişinin C Çalışma Zamanı Kitaplığı (CRT) bölümüne bakın. Bu, kodunuzda gerekli değişiklikleri tanımlamak için kullanabileceğiniz etkilenen üst bilgilerin ve işlevlerin listesini içerir.

Ayrıca bkz.

Visual C++ taşıma ve yükseltme kılavuzu
Olası Yükseltme Sorunlarına Genel Bakış (Visual C++)
Visual C++'ın önceki sürümlerinden projeleri yükseltme
Visual C++ değişiklik geçmişi 2003 - 2015
Visual Studio’deki C++ uyumluluk geliştirmeleri