Udostępnij za pośrednictwem


Funkcje biblioteki CRT

W tym temacie omówiono różne pliki .lib biblioteki uruchomieniowej C, jak również ich opcje kompilatora skojarzone i dyrektywy preprocesora.

Biblioteki uruchomieniowej c (CRT)

Następujące biblioteki zawierają funkcje biblioteki uruchomieniowej C.

Biblioteka uruchomieniowa c (bez iostream lub standardowa biblioteka języka C++)

Biblioteka DLL skojarzony

Właściwości

Opcja

Dyrektywy preprocesora

LibCMt.lib

Brak, statyczne łącze.

Łącze wielowątkowe, statyczne

/MT

_MT

MSVCRT.lib

msvcr110.dll

Wielowątkowe, dynamic link (Importuj biblioteki MSVCR110.BIBLIOTEKA DLL).Należy pamiętać, że jeśli używana jest standardowa biblioteka języka C++, program będzie konieczne MSVCP110.DLL do uruchomienia.

OPCJE

_MT, _DLL

LibCMtD.lib

Brak łącza statyczne

Łącze wielowątkowe, statyczne (Debugowanie)

/MTd

_DEBUG, _MT

MSVCRtD.lib

msvcr110d.dll

Wielowątkowe, dynamic link (Importuj biblioteki MSVCR110D.Biblioteka DLL) (Debugowanie).

/MDd

_DEBUG, _MT, _DLL

łączona

Brak łącza statyczne

C Runtime library statyczne.Używane dla kodu zarządzanego i rodzimego mieszanych.

/clr

/clr:oldSyntax

 

wersji produkcyjnej

Brak łącza statyczne

C Runtime library statyczne skompilowany jako 100% czystego kodu MSIL.Cały kod jest zgodny z specyfikacji ECMA narz dla MSIL.

/clr:pure

 

[!UWAGA]

CRT jednowątkowe (libc.lib, libcd.lib) (dawniej /ML lub /MLd opcje) nie jest już dostępny.Zamiast tego należy użyć wielowątkowe CRT.See Wielowątkowa bibliotek wydajności.

Jeśli program z wiersza polecenia bez opcji kompilatora, który określa biblioteka uruchomieniowa C, program łączący użyje LIBCMT.LIB.To różni się od poprzednich wersji programu Visual C++, który używany LIBC.Biblioteka, biblioteka jednowątkowe zamiast.

Za pomocą statycznie CRT pociąga za sobą żadnych informacji o stanie zapisane przez biblioteki c runtime będzie lokalnego wystąpienia CRT.Na przykład, jeśli korzystasz z strtok, _strtok_l, wcstok, _wcstok_l, _mbstok, _mbstok_l podczas korzystania z CRT statycznie, położenie strtok parser jest niezwiązanych z strtok stan używany w kodzie w tym samym procesie (ale w innej bibliotece DLL lub EXE), połączonej z inną instancję statyczne CRT.Natomiast CRT dynamicznie połączone udziały Państwa dla całego kodu w proces, który dynamicznie połączone z CRT.Dotyczą tego nie stosuje się, jeżeli za pomocą nowych wersji bezpieczniejsze tych funkcji; na przykład strtok_s ten problem nie występuje.

Ponieważ biblioteki DLL, zbudowany przez połączenie CRT statycznych będą miały stanu CRT, nie zaleca się połączyć statycznie CRT w bibliotece DLL, chyba że konsekwencje tego szczególnie pożądane i zrozumienie.Na przykład, jeśli wywołana _set_se_translator w pliku wykonywalnym ładunków DLL połączone z własnych statyczne CRT, wyjątki sprzętowe wygenerowany przez kod w bibliotece DLL nie zostanie przechwycony przez translator, ale wyjątki sprzętowe wygenerowany przez kod w głównym pliku wykonywalnego, który zostanie przechwycony.

Jeśli używasz /clr przełącznik kompilatora, kod zostanie połączony z biblioteka statyczna, łączona.Biblioteka statyczna stanowi proxy między kodu zarządzanego i CRT macierzystym.Nie można używać statycznie CRT ( /MT lub /MTd opcje) z /clr.Użyj połączone dynamicznie bibliotek (/MD lub /MDd) zamiast.

Jeśli używasz /clr:pure przełącznik kompilatora, kod zostanie połączony z wersji produkcyjnej biblioteka statyczna.Tak jak w /clr, nie można połączyć się z biblioteką statycznie.

Aby uzyskać więcej informacji na temat używania CRT z /clr, zobacz Mieszane (macierzystych i zarządzanych); for /clr:pure, see Kod czystej i zweryfikowania (C + +/ CLI).

Aby utworzyć wersję debugowania aplikacji, _DEBUG musi być określona flaga i aplikacji musi być powiązana z wersją programu debug jednego z tych bibliotek.Aby uzyskać więcej informacji na temat korzystania z wersji debugowania plików biblioteki, zobacz Techniki debugowania CRT.

Ta wersja Visual C++ nie jest zgodna z normą C99.

Standardowa biblioteka języka C++

Standardowa biblioteka języka C++

Właściwości

Opcja

Dyrektywy preprocesora

LIBCPMT.LIB

Łącze wielowątkowe, statyczne

/MT

_MT

MSVCPRT.LIB

Wielowątkowe, dynamic link (Importuj biblioteki MSVCP110.dll)

/MD

_MT, _DLL

LIBCPMTD.LIB

Łącze wielowątkowe, statyczne

/MTd

_DEBUG, _MT

MSVCPRTD.LIB

Wielowątkowe, dynamic link (Importuj biblioteki MSVCP110D.BIBLIOTEKA DLL)

/MDd

_DEBUG, _MT, _DLL

Uwaga LIBCP.LIB i LIBCPD.LIB (za pomocą starego /ML i /MLd opcje) zostały usunięte.Za pomocą LIBCPMT.LIB i LIBCPMTD.Zamiast LIB via /MT i /MTd opcje.

Podczas tworzenia wersji projektu, w jednym z podstawowych biblioteki uruchomieniowej C (LIBCMT.BIBLIOTEKA, MSVCMRT.BIBLIOTEKA, MSVCRT.Jest domyślnie połączony LIB), w zależności od opcji kompilatora wybrać (wielowątkowe, biblioteka DLL/CLR).Jeśli zawiera jeden z Pliki nagłówków w kodzie, standardowa biblioteka języka C++ będzie połączony w automatycznie przez Visual C++ w czasie kompilacji.Na przykład:

#include <ios> 

Jaka jest różnica między msvcrt.dll i msvcr110.dll?

"Znany DLL," oznacza, że jest składnikiem systemu własnością i są wbudowane w system Windows jest teraz msvcrt.dll.Jest przeznaczony do wykorzystania w przyszłości tylko przez składniki na poziomie systemu.

Jakie problemy istnieć, jeśli aplikacja używa zarówno msvcrt.dll i msvcr110.dll?

Jeśli plik .lib lub .obj, który musi połączyć się z msvcrt.lib, następnie powinna nie trzeba ponownie skompilować go do pracy z nowych msvcrt.lib w programie Visual C++.Plik .lib lub .obj może polegać na rozmiary, przesunięcia pola lub nazwy funkcji składników różnych klas CRT lub zmiennych, i tych, należy wszystkie nadal występują w sposób zgodny.Przy ponownym łączeniu przeciwko msvcrt.lib obrazie końcowym EXE i DLL będzie teraz ma zależności msvcr110.dll zamiast msvcrt.dll.

Jeśli masz więcej niż jeden DLL lub EXE, a następnie może mieć więcej niż jeden CRT, niezależnie od tego, czy są przy użyciu różnych wersji Visual C++.Na przykład statycznie łączenie CRT do wielu bibliotek DLL może przedstawić ten sam problem.Ten problem z statyczne im monitory CRT deweloperzy których uzyskał skompilować z /MD biblioteki DLL CRT.Teraz, że biblioteka DLL CRT została zmieniona na msvcr110.dll, aplikacje mogą mieć niektóre składniki połączony msvcrt.dll i innych msvcr110.dll.Jeśli biblioteki DLL zasobów CRT granice msvcrt.dll i msvcr110.dll, będą występować problemy z niedopasowane im monitory CRT i konieczne do ponownego kompilowania projektu Visual C++.

Jeśli program korzysta z więcej niż jedną wersję CRT, niektóre opieki granicami DLL jest potrzebne podczas przekazywania niektórych obiektów CRT (takich jak dojścia do plików, ustawień regionalnych i zmiennych środowiskowych).Więcej informacji na temat kwestii i sposób ich rozwiązania, zobacz Potencjalnych błędów, przekazując obiektów CRT granicami DLL.

Zobacz też

Inne zasoby

C Run-Time Library Reference