Sdílet prostřednictvím


Funkce knihovny CRT

Toto téma popisuje různých lib souborů, které tvoří knihoven C run-time jakož i jejich – možnosti kompilátoru přidružené a preprocessor direktivy.

Běhové knihovny jazyka C (CRT)

Následující knihovny obsahují funkce jazyka C run-time library.

Knihovna C run-time (bez iostream nebo standardní knihovny C++)

Přidružené knihovny DLL

Vlastnosti

Možnost

Preprocessor direktivy

Libcmt.lib

Žádné, statické propojení.

Ve více vláknech, statické propojení

/MT

_MT

Msvcrt.lib

msvcr120.dll

Ve více vláknech, dynamická odkaz (import knihovny MSVCR120. KNIHOVNA DLL).Je potřeba upozornit, pokud chcete používat standardní knihovny C++, váš program bude nutné MSVCP120. Knihovna DLL pro spuštění.

/MD

_MT, _DLL

libcmtd.lib

Žádná, statické propojení

Ve více vláknech, statické odkaz (ladění)

/MTd

_DEBUG, _MT

msvcrtd.lib

msvcr120d.dll

Ve více vláknech, dynamická odkaz (import knihovny MSVCR120D. Knihovna DLL) (ladění).

/MDd

_DEBUG, _MT, _DLL

msvcmrt.lib

Žádná, statické propojení

Statické knihoven C Runtime.Použít pro smíšený spravované/nativní kód.

/clr

 

Msvcurt.lib

Žádná, statické propojení

Statické knihovny C Runtime kompilované jako 100 % čistém MSIL kódu.Všechny kódu v souladu s ECMA URT specifikace pro MSIL.

/ CLR: čistého

 

[!POZNÁMKA]

Jeden podproces CRT (libc.lib, libcd.lib) (dříve /ML nebo /MLd Možnosti) již není k dispozici.Místo toho použijte ve více vláknech CRT.Podívejte se na téma Výkon vícevláknových knihoven.

Pokud vytváříte odkaz svůj program z příkazového řádku bez možnosti kompilátoru, která určuje knihovnu C run-time, propojovací program bude používat LIBCMT. LIB.Tím se liší od předchozích verzí aplikace Visual C++, který používá LIBC. LIB, knihovna jeden podproces, místo toho.

Pomocí staticky propojené CRT znamená, že všechny informace o stavu uložené C runtime library bude být místní instanci CRT.Například, pokud použijete 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 Stav, použit v kódu ve stejném procesu (ale v různých knihovny DLL a EXE), který je přidružen k jiné instanci statické CRT.Dynamicky propojené CRT naopak sdílí stavu pro všechny kódu v rámci procesu dynamicky propojenou CRT.Tento problém není platné, pokud použijete nové bezpečnější verze z těchto funkcí; Můžete například strtok_s nemá tento problém.

Vzhledem k tomu, že soubor DLL sestaven propojením s statické CRT bude mít stavu CRT, nedoporučuje staticky propojit k CRT v knihovně DLL pouze v případě dopadech tohoto konkrétně požadovaných a srozumitelná.Například při volání _set_se_translator v spustitelný soubor, který načte knihovnu DLL propojené s vlastním statické CRT, nesmí být žádné hardwarové výjimky generovaných kódu v knihovně DLL zachycena překladač, ale bude být zachycena hardwarové výjimky generovaných kódu v hlavní spustitelný soubor.

Pokud používáte /clr přepínače kompilátoru váš kód bude propojena s statické knihovny, msvcmrt.lib.Statické knihovny poskytuje proxy server mezi váš spravovaný kód a nativní CRT.Nelze použít staticky propojené CRT ( /MT nebo /MTd Možnosti) s /clr.Používat dynamicky propojené knihovny (/MD nebo /MDd) místo toho.

Pokud používáte /clr:pure přepínače kompilátoru váš kód bude propojena s msvcurt.lib statické knihovny.Stejně jako u /clr, nelze propojit s knihovnou staticky propojený.

Další informace o používání CRT s /clr, naleznete v části Smíšená (nativní a spravovaná) sestavení; pro /clr:pure, naleznete v části Čistý a ověřitelný kód (C++/CLI).

K sestavení ladicí verze aplikace, _DEBUG příznak musí být definován a aplikace musí být spojeny s ladicí verze jednoho z těchto knihoven.Další informace o použití ladicí verze ze souborů knihoven, naleznete v části techniky ladění CRT.

Tato verze Visual C++ není splňovaly standardní C99.

Standardní knihovna C++

Standardní knihovna C++

Vlastnosti

Možnost

Preprocessor direktivy

LIBCPMT. LIB

Ve více vláknech, statické propojení

/MT

_MT

MSVCPRT. LIB

Ve více vláknech, dynamická odkaz (import v knihovně MSVCP120.dll)

/MD

_MT, _DLL

LIBCPMTD. LIB

Ve více vláknech, statické propojení

/MTd

_DEBUG, _MT

MSVCPRTD. LIB

Ve více vláknech, dynamická odkaz (import knihovny MSVCP120D. KNIHOVNA DLL)

/MDd

_DEBUG, _MT, _DLL

Poznámka: LIBCP. LIB a LIBCPD. LIB (prostřednictvím stará /ML a /MLd Možnosti) byly odebrány.Pomocí LIBCPMT. LIB a LIBCPMTD. Místo toho LIB prostřednictvím /MT a /MTd Možnosti.

Při vytváření prodejní verzi projektu, jednu z základní knihoven C run-time (LIBCMT. LIB, MSVCMRT. LIB, MSVCRT. Ve výchozím nastavení je propojen LIB), v závislosti na možnosti kompilátoru můžete zvolit (ve více vláknech, knihovna DLL, / CLR).Je-li zahrnout jeden z Standardní knihovna C++ – hlavičkové soubory ve vašem kódu standardní knihovny C++ bude propojena v automaticky aplikace Visual C++ v době kompilace.Příklad:

#include <ios> 

Chcete-li změnit, které základní knihovna C run-time je propojena v sadě Visual Studio, otevřete na stránkách vlastností pro váš projekt.Otevřít Vlastnosti konfigurace, C/C++, generování kódu stránky a změňte Runtime Library nastavení.Chcete-li změnit Common Language Runtime knihoven, otevřete na stránkách vlastností pro váš projekt.Otevřít Vlastnosti konfigurace, C/C++, Obecné stránky a poté změňte Common Language RunTime Support nastavení.

Jaký je rozdíl mezi msvcrt.dll a msvcr120.dll?

Msvcrt.dll je nyní "Známé soubor DLL," znamená, že je systémová součást majetkem a vytvoření v systému Windows.Je určena pro budoucí použití pouze komponentami úrovni systému.

Jaké problémy existovat, pokud aplikace používá msvcrt.dll a msvcr120.dll?

Pokud máte LIB nebo .obj soubor, který potřebuje pro připojení k msvcrt.lib, pak by neměl muset znovu zkompilovat pro práci s novou msvcrt.lib v jazyce Visual C++.Soubor LIB nebo .obj může spoléhají na velikostí, posun pole nebo funkce názvy členů z různých tříd CRT nebo proměnné a ty, by měl všechny stále existovat kompatibilní způsobem.Při změně vazby proti msvcrt.lib, konečný obraz EXE a DLL nyní mít závislost na msvcr120.dll namísto msvcrt.dll.

Pokud máte více než jeden soubor DLL nebo EXE, pak může mít více než jeden CRT, zda používáte různé verze Visual C++.Můžete například statického propojení CRT do různých knihoven DLL může představovat stejný problém.Vývojáři dochází k tomuto problému s statické CRTs jste dostali pokyn ke kompilaci s /MD používat CRT knihovny DLL.Teď, když CRT knihovny DLL byl přejmenován na msvcr120.dll, aplikace mohou mít některé součásti propojen msvcr120.dll msvcrt.dll a ostatním uživatelům.Pokud vaše DLL knihovny úspěšně CRT prostředků přes hranice msvcrt.dll a msvcr120.dll, bude dojde k potížím s odlišnými CRTs a je třeba znovu zkompilovat svého projektu pomocí jazyka Visual C++.

Pokud váš program používá více než jednu verzi CRT, některé stará nad rámec hranic knihovny DLL je potřeba při předávání některých CRT objekty (například popisovače souborů, národní prostředí a proměnné prostředí).Další informace o problémech účastníky a jejich řešení naleznete v tématu Možné chyby při předávání objektů CRT přes hranice knihovny DLL.

Viz také

Další zdroje

Referenční dokumentace běhové knihovny jazyka C