Funkce knihovny CRT
Toto téma popisuje různé lib soubory, které zahrnují C Runtime knihovny a jejich možnosti kompilátoru přidružené a direktivy předprocesoru.
C runtime knihovny (CRT)
Následující knihovny obsahují funkce C Runtime library.
C runtime library (bez iostream nebo standard C++ library) |
Přidružené knihovny DLL |
Charakteristika |
Možnost |
Direktivy preprocesoru |
---|---|---|---|---|
libcmt.lib |
Žádné statické propojení. |
Propojení s více podprocesy, statické |
_MT |
|
Msvcrt.lib |
msvcr110.dll |
Podprocesy, dynamické propojení (import knihovny MSVCR110.(DLL).Uvědomte si, že používáte Standard C++ Library program potřebovat MSVCP110.Spustit knihovnu DLL. |
_MT _DLL |
|
libcmtd.lib |
Žádné statické propojení |
Propojení s více podprocesy, statické (ladění) |
/MTd |
_DEBUG _MT |
msvcrtd.lib |
msvcr110d.dll |
Podprocesy, dynamické propojení (import knihovny MSVCR110D.(DLL) (ladění). |
/MDd |
_DEBUG, _MT, _DLL |
msvcmrt.lib |
Žádné statické propojení |
Statická knihovna C Runtime.Používané pro smíšené nativní spravovaného kódu. |
/clr /clr:oldSyntax |
|
msvcurt.lib |
Žádné statické propojení |
C Runtime statická Knihovna kompilovaný jako 100 % čistého MSIL kód.Veškerý kód vyhovuje specifikaci ECMA URT pro MSIL. |
/clr:pure |
|
[!POZNÁMKA]
CRT jedním podprocesem (libc.lib, libcd.lib) (dříve /ML nebo /MLd možnosti) již není k dispozici.Místo toho použijte CRT s více podprocesy.Viz téma Podprocesy knihoven výkonu.
Pokud propojíte váš program z příkazového řádku bez možnosti kompilátoru, který určuje C Runtime library, vytvořeném propojovacím pomocí LIBCMT.LIB.To je odlišné od předchozích verzí aplikace Visual C++, který používá LIBC.LIB, knihovna s jediným podprocesem místo.
Použití staticky propojené CRT znamená jakékoli informace o stavu, který je uložen v knihovně c runtime bude místní instanci CRT.Použijete-li například strtok, _strtok_l, wcstok, _wcstok_l, _mbstok, _mbstok_l při použití staticky propojené CRT, umístění strtok Analyzátor je nezávislé na strtok stavu v kódu ve stejném procesu (ale v různých EXE nebo DLL) připojený k jiné instanci statické CRT.Naopak dynamicky propojených CRT sdílí stavu pro veškerý kód v rámci procesu, který dynamicky propojen CRT.Tyto obavy neplatí, pokud používáte nový bezpečnější verze těchto funkcí; například strtok_s tento problém nemá.
Protože knihovnu DLL postaveny propojením statické CRT bude mít stav CRT, není doporučeno propojení CRT v knihovně DLL staticky Pokud následky této konkrétní potřeby a chápat.Například při volání _set_se_translator ve spustitelném souboru, načte knihovnu DLL propojen vlastní statické CRT, hardwarové výjimky generovaný kód v knihovně DLL nesmí být zachycen překladač, ale vzniká výjimky hardwaru generované v hlavní spustitelný kód.
Pokud používáte /clr kompilátor switch kódu bude spojena s statické knihovny, msvcmrt.lib.Statická knihovna poskytuje proxy mezi spravovaný kód a nativní CRT.Nelze použít staticky propojené CRT ( /MT nebo /MTd možnosti) s /clr.Používat dynamicky propojeny knihovny (/MD nebo /MDd) místo.
Pokud používáte /clr:pure přepínač kompilátor kódu bude spojena s msvcurt.lib statické knihovny.Stejně jako /clr, nelze propojit s knihovnou staticky propojené.
Další informace o použití CRT s /clr, viz Smíšená (nativní a spravovaná) sestavení; for /clr:pure, see Čistý a ověřitelné kódu (C + +/ CLI).
Sestavení ladicí verze aplikace, _DEBUG musí být definována příznak a aplikace musí být spojena s ladicí verze jednoho z těchto knihoven.Další informace o použití ladicí verze knihovny souborů viz Techniky ladění CRT.
Tato verze Visual C++ není splňovala podmínky shody s normou C99.
Standardní knihovna C++
Standardní knihovna C++ |
Charakteristika |
Možnost |
Direktivy preprocesoru |
---|---|---|---|
LIBCPMT.LIB |
Propojení s více podprocesy, statické |
/MT |
_MT |
MSVCPRT.LIB |
Podprocesy, dynamické propojení (import knihovny MSVCP110.dll) |
/MD |
_MT _DLL |
LIBCPMTD.LIB |
Propojení s více podprocesy, statické |
/MTd |
_DEBUG _MT |
MSVCPRTD.LIB |
Podprocesy, dynamické propojení (import knihovny MSVCP110D.(DLL) |
/MDd |
_DEBUG, _MT, _DLL |
Poznámka: LIBCP.LIB a LIBCPD.LIB (přes staré /ML a /MLd možnosti) byla odebrána.Pomocí LIBCPMT.LIB a LIBCPMTD.Místo toho LIB prostřednictvím /MT a /MTd možnosti.
Při vytváření prodejní verzi projektu, jeden základní c knihoven run-time (LIBCMT.LIB, MSVCMRT.LIB, MSVCRT.Ve výchozím nastavení je propojen LIB), v závislosti na kompilátoru zvolte (s více podprocesy, DLL, /clr).Pokud jeden z Soubory hlaviček ve vašem kódu Standard C++ Library budou propojeny v automaticky podle Visual C++ v době kompilace.Příklad:
#include <ios>
Jaký je rozdíl mezi msvcrt.dll a msvcr110.dll?
Nyní je msvcrt.dll "Známé DLL," což znamená, že je součást systému vlastněné a integrované v systému Windows.Je určena pro budoucí použití pouze podle úrovně systémové součásti.
Jaké problémy existovat, pokud aplikace používá msvcrt.dll a msvcr110.dll?
Pokud máte souboru LIB nebo obj, který potřebuje pro připojení k msvcrt.lib, pak by nemáte překompilovat pro práci s novou msvcrt.lib v jazyce C++ je.Souboru LIB nebo obj může záviset na velikosti, pole kompenzace nebo názvů členské funkce různých tříd CRT nebo proměnné a ty by měly všechny dosud existují kompatibilní způsobem.Při změně vazby proti msvcrt.lib konečný obraz EXE a DLL nyní jsou závislé na msvcr110.dll namísto msvcrt.dll.
Pokud máte více než jedna knihovna DLL nebo EXE, pak může mít více než jeden CRT, zda používáte různé verze Visual C++.Například do více knihoven DLL staticky propojení CRT mohou představovat stejný problém.Vývojáři dochází k tomuto problému s CRTs statické jste dostali k kompilace s /MD používat knihovnu DLL CRT.Nyní, CRT DLL byla přejmenována na msvcr110.dll, aplikace mohou mít některé součásti propojen msvcrt.dll a ostatní msvcr110.dll.Jestliže vaší knihovny DLL prostředků CRT přes hranice msvcrt.dll a msvcr110.dll, bude dojít k potížím s neodpovídající CRTs a třeba překompilovat projektu Visual C++.
Pokud program používá více než jednu verzi CRT, některé péče přes hranice DLL je zapotřebí při předávání určitých objektů CRT (například popisovače souborů národních prostředí a proměnné prostředí).Další informace o souvisejících problémů a jejich řešení najdete Potenciální chyby procházející přes hranice DLL objektů CRT.