crt kitaplığı özellikleri
Bu konuda c çalışma zamanı kitaplıkları yanı sıra bunların ilişkili derleyici seçenekleri ve Önişlemci yönergeleri oluşturan çeşitli .lib dosyaları anlatılmaktadır.
C çalışma zamanı kitaplıkları (crt)
c Çalışma Zamanı Kitaplığı işlevlerini aşağıdaki kitaplıkları içerir.
C çalışma zamanı kitaplığı (olmadan iostream veya Standart C++ Kitaplığı) |
İlişkili dll |
Özellikleri |
Seçenek |
Önişlemci yönergeleri |
---|---|---|---|---|
libcmt.lib |
Yok, statik bir bağlantı. |
Çok iş parçacıklı, statik bağlantı |
_MT |
|
Msvcrt.lib |
msvcr110.dll |
Çok iş parçacıklı, dinamik bağlantı (MSVCR110 alma Kitaplığı.(DLL). Standart C++ Kitaplığı kullanıyorsanız, programın MSVCP110 gerektiğini unutmayın.DLL'i gerektirir. |
_MT, _DLL |
|
libcmtd.lib |
Hiçbiri statik bağlantı |
Çok iş parçacıklı, statik bağlantı (hata ayıklama) |
/MTd |
_DEBUG, _MT |
msvcrtd.lib |
msvcr110d.dll |
Çok iş parçacıklı, dinamik bağlantı (MSVCR110D alma Kitaplığı.dll) (hata ayıklama). |
/MDd |
_DEBUG, _MT, _DLL |
msvcmrt.lib |
Hiçbiri statik bağlantı |
Statik c Çalışma Zamanı Kitaplığı. Karışık yönetilen/yerel kodu için kullanılır. |
/clr /clr:oldSyntax |
|
msvcurt.lib |
Hiçbiri statik bağlantı |
C çalışma zamanı statik kitaplığı % 100 saf MSIL kodu olarak derlenir. Tüm kod için MSIL ecma urt spec ile uyumludur. |
/clr:pure |
|
Not
Tek iş parçacıklı crt (libc.lib, libcd.lib) (eski adıyla /ML veya /MLd seçenekleri) artık kullanılamıyor.Bunun yerine, çok iş parçacıklı crt kullanın.Bkz: Çok iş parçacıklı kitaplıkları performans
Programınız c çalışma zamanı kitaplığı belirtir bir derleyici seçeneği olmadan komut satırından bağlantısını linker LIBCMT kullanır.LIB. Bu, LIBC kullanılan Visual C++ önceki sürümlerden farklıdır.LIB, tek iş parçacıklı kitaplığı yerine.
Statik olarak bağlantılı crt kullanarak c çalışma zamanı kitaplığı tarafından kaydedilen herhangi bir durum bilgilerini yerel crt örneğine anlamına gelir. Kullanıyorsanız, örneğin, strtok, _strtok_l, wcstok, _wcstok_l, _mbstok, _mbstok_l konumunu bir statik olarak bağlantılı crt kullanırken strtok için Ayrıştırıcı ilişkisiz strtok durumu statik crt başka bir örneğine bağlı kodu aynı işlemde (ancak farklı bir dll ya da exe) kullanılır. Bunun tersine, dinamik olarak bağlantılı crt crt dinamik olarak bağlı bir işlemdeki tüm kodu ili paylaşır. Bu işlevler daha güvenli yeni sürümlerini kullanıyorsanız, bu endişeyi uygulanmaz; Örneğin, strtok_s bu sorun yok.
crt durumuna bir dll için statik bir crt bağlayarak yerleşik olduğundan, statik olarak sürece bu sonuçları özellikle istenen ve anlaşılan bir dll olarak crt bağlamak için önerilmez. Örneğin, arama, _set_se_translator dll yükler için kendi statik crt bağlı dll içinde kod tarafından oluşturulan herhangi bir donanım çevirici tarafından özeldurumun değil, ancak ana yürütülebilir kod tarafından üretilen donanım özel durumlar yakalandı bir yürütülebilir dosya içinde.
Kullanıyorsanız, /clr derleyici anahtarý kodunuzu ile bağlantılı bir statik kitaplığı, msvcmrt.lib. Statik kitaplığı yönetilen kodunuz ve doğal crt arasında bir proxy sağlar. Statik olarak bağlantılı crt kullanamazsınız ( /MT veya /MTd seçenekleri) ile /clr. Dinamik olarak bağlı kitaplıklarını kullanma (/MD veya /MDd) onun yerine.
Kullanıyorsanız, /clr:pure derleyici anahtarý kodunuzu statik kitaplığı msvcurt.lib ile bağlantılı olabilir. Olduğu gibi /clr, statik olarak bağlı kitaplıkla bağlayamazsınız.
crt ile kullanma hakkında daha fazla bilgi için /clr, bkz: Karışık (Yerel ve Yönetilen) Derlemeler; for /clr:pure, see Saf ve doğrulanabilir kod (C++/ CLI).
Uygulamanız, hata ayıklama sürümünü oluşturmak için _debug bayrağı tanımlanmalı ve uygulama bir hata ayıklama sürümü bu kitaplıklardan biri ile bağlantılı olabilir. Kitaplık dosyaları hata ayıklama sürümlerini kullanma hakkında daha fazla bilgi için bkz: crt hata ayıklama teknikleri.
Bu sürümü, Visual C++ C99 standardı ile uyumlu değil.
Standart C++ Kitaplığı
Standart C++ Kitaplığı |
Özellikleri |
Seçenek |
Önişlemci yönergeleri |
---|---|---|---|
LIBCPMT.LIB |
Çok iş parçacıklı, statik bağlantı |
/MT |
_MT |
MSVCPRT.LIB |
Çok iş parçacıklı, dinamik bağlantı (MSVCP110.dll alma kitaplığı) |
/MD |
_MT, _DLL |
LIBCPMTD.LIB |
Çok iş parçacıklı, statik bağlantı |
/MTd |
_DEBUG, _MT |
MSVCPRTD.LIB |
Çok iş parçacıklı, dinamik bağlantı (MSVCP110D alma Kitaplığı.DLL) |
/MDd |
_DEBUG, _MT, _DLL |
Not LIBCP.LIB ve LIBCPD.LIB (eski aracılığıyla /ML ve /MLd seçenekleri) kaldırılmıştır. LIBCPMT kullanın.LIB ve LIBCPMTD.Bunun yerine yoluyla LIB /MT ve /MTd seçenekleri.
Ne zaman sürümü, projenizi bir temel c çalışma zamanı kitaplıkları (LIBCMT. yapıLIB MSVCMRT.LIB MSVCRT.LIB) varsayılan olarak bağlı, derleyici seçeneği belirlediğinize bağlı olarak seçtiğiniz (çok iş parçacıklı, dll, /clr). Birini eklerseniz, Üstbilgi dosyaları kodunuzda, Standart C++ Kitaplığı içinde tarafından otomatik olarak bağlanacak Visual C++ derleme zamanında. Örne?in:
#include <ios>
Msvcrt.dll ve msvcr110.dll arasındaki fark nedir?
Msvcrt.dll "olduğu ve Windows tarafından oluşturulmuş bir sistem bileşeni olduğu anlamına gelen bir bilinen dll," sunulmuştur. Bu yalnızca sistem düzeyi bileşenleri tarafından gelecekte kullanılmak içindir.
Msvcrt.dll ve msvcr110.dll bir uygulama kullanıyorsa, hangi sorunları var?
Msvcrt.lib için bağlantı gerektiren, .lib veya .obj bir dosyanız varsa, yeni msvcrt.lib Visual C++ ile çalışmak üzere yeniden derlemeniz gerekmeyecektir. .Lib veya .obj dosya boyutları, alan uzaklıklar veya üye işlev adları çeşitli crt sınıfların veya değişkenler biçimlendirmenizi ve olanların tümü hala uyumlu bir şekilde olması gerekir. Msvcrt.lib karşı yeniden bağladığınızda son exe ve dll görüntü msvcrt.dll yerine msvcr110.dll, şimdi bir bağımlılık olacaktır.
Birden fazla dll ya da exe sahip sonra farklı sürümlerini kullanan olsun olmasın, birden fazla crt olabilir Visual C++. Örneğin, statik olarak crt birden fazla dll bağlama aynı sorunu sunabilir. Geliştiriciler statik kaplarlar bu sorunla karşılaşmış talimat ile derlemek için /MD crt dll kullanılacak. crt dll msvcr110.dll için yeniden adlandırıldı artık, uygulamaları msvcrt.dll ve diğerleri için msvcr110.dll bağlı olan bazı bileşenler olabilir. Kendi dll msvcrt.dll ve msvcr110.dll sınırı boyunca crt kaynakları aktarýrsanýz, eşleşmeyen kaplarlar sorunlarla karşılaşırsanız ve projenizin Visual C++ ile derlemeniz gerekir.
Programınız crt birden fazla sürümünü kullanıyorsanız, bazı bakım bazı crt nesnelerinin (örneğin, dosya tanıtıcıları, yerel ayarlar ve ortam değişkenleri) geçirerek dll sınırlarında gerekli değildir. Nasıl giderilecekleri ve ilgili sorunlar hakkında daha fazla bilgi için bkz: crt nesneleri dll sınırlarında ileterek olası hataları.