Sdílet prostřednictvím


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

_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.

PŘEPÍNAČE

_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.

Viz také

Další zdroje

C referenční knihovny runtime