Ako prepojiť s správnej knižnice C Run-Time (CRT)

Preklady článku Preklady článku
ID článku: 140584 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

SUHRN

Existuje šesť typov opakovane knižníc:
  • Statické Single závitové knižnica (Debug/Release)
  • Statické viacvláknových knižnice (Debug/Release)
  • Dynamické Knižnica (DLL)(Debug/Release)
Poznámka Každá knižnica má k ladiacej verzii a uvoľnenie verzia.

DLL je mnohovláknové-safe a single-závit verziu CRT knižnica nie je stanovený DLLs. Ak opätovne použiteľný knižnica alebo používateľa knižnice je použitie viacerých vlákien, potom knižnica musí byť typ mnohovláknové-safe knižnice.

Poznámka Debug knižníc a kompilátor prepínače /MLd, /MTd a /MDd sú iba k dispozícii v Visual C++ verzie 4.0 a novšej.

Nasledujúca tabuľka uvádza, ktoré kompilátor prepínač sa použijú pre budovy každý zo šiestich typov opakovane knižníc (všetky typy DLL sú mnohovláknové-safe). Akýkoľvek projekt, ktorý používa opakovane použiteľných knižnica mali používať rovnaké kompilátor prepínač. Pri použití kompilátora /ML(default), MLd, /MT, MTd, /MD, alebo /MDd prepínače, kompilátor umiestni názov predvolenej knižnice (uvedené v časti Knižnica stĺpca) v súbore objektu.
Reusable Library            Switch    Library    Macro(s) Defined
----------------------------------------------------------------
Single Threaded             /ML       LIBC       (none)
Static MultiThread          /MT       LIBCMT     _MT
Dynamic Link (DLL)          /MD       MSVCRT     _MT and _DLL
Debug Single Threaded       /MLd      LIBCD      _DEBUG
Debug Static MultiThread    /MTd      LIBCMTD    _DEBUG and _MT
Debug Dynamic Link (DLL)    /MDd      MSVCRTD    _DEBUG, _MT, and _DLL
				
Môžete zobraziť objekt modul určiť, ktoré prejdú bol použitý pri bol postavený s použitím tohto príkazu:
   dumpbin /all <object>.obj
				
Pozrieť v sekcii s názvom PRVOTNÝCH údajov #1. V stĺpci úplne vpravo predvolené knižnice budú vypísané.

dalsie informacie

Opakovane použiteľných knižnica a všetky jeho užívatelia by mali používať rovnaké CRT knižnica typy a preto rovnaké kompilátor prepínač. Makrá definované (alebo nie definované) pre každú z kompilátor prepínače možno použiť v hlavičke súbor (súbory) z opakovane použiteľných knižnica presadiť riadne kompilátor prepínač. The vzorky kód v tomto článku demonštruje, ako používať tieto makrá.

Ak by ste chceli užívateľov knižnice, aby mohli vybrať statický alebo DLL CRT, by mala poskytnúť statické a typy opakovane použiteľných knižnica DLL.

Ak sa rozhodnete mix CRT knižníc, nezabudnite, že máte dve oddelené kópie CRT s osobitnou a odlišnou časťou štátov, takže musíte byť pozor na čo by ste skúsiť urobiť cez CRT-boundary. Existuje mnoho spôsobov dostať do problémov s dvoma CRT. Tu je len niekoľko:
  • Existujú dve samostatné zhromaždenia. Nemozem alokovat (explicitne s novými, Funkcia malloc, alebo tak, na--, alebo implicitne s strdup, strstreambuf::str, alebo tak ďalej), a potom prejsť ukazovateľ cez CRT-boundary byť oslobodený.
  • Nemôžete prejsť na súbor * súbor alebo rukoväť cez CRT-hranice a očakávať "Štádiách low-level IO" pracovať.
  • Nemôžete nastaviť locale v jednom a očakávať iný je locale byť nastaviť.
Začiatok s Visual C ++ 4.0, linker bude vydať upozornenie (LNK4098), ak modulu výsledná pokúša kombinovať viac ako jednu kópiu CRT knižnica. Ďalšie informácie, vyhľadajte súbor Pomocníka LNK4098.

Ukážkový kód

Nasledujúci kód môže byť použitý v opakovane použiteľných knižnica hlavička súboru zabezpečiť konzistentné používanie správnej kompilátor prepínač:
// MyReusableStaticSingleThreadReleaseLibrary.h
#if defined(_MT) || defined(_DEBUG)
    #error The /ML compiler switch is required.
#endif

// MyReusableStaticMultithreadReleaseLibrary.h
#if !defined(_MT) || defined(_DLL) || defined(_DEBUG)
    #error The /MT compiler switch is required.
#endif

// MyReusableDynamicLinkReleaseLibrary.h
#if !defined(_MT) || !defined(_DLL) || defined(_DEBUG)
    #error The /MD compiler switch is required.
#endif

// MyReusableStaticSingleThreadDebugLibrary.h
#if defined(_MT) || !defined(_DEBUG)
    #error The /MLd compiler switch is required.
#endif

// MyReusableStaticMultithreadDebugLibrary.h
#if !defined(_MT) || defined(_DLL) || !defined(_DEBUG)
    #error The /MTd compiler switch is required.
#endif

// MyReusableDynamicLinkDebugLibrary.h
#if !defined(_MT) || !defined(_DLL) || !defined(_DEBUG)
    #error The /MDd compiler switch is required.
#endif
				

Vlastnosti

ID článku: 140584 - Posledná kontrola: 15. októbra 2012 - Revízia: 4.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • Microsoft Visual C++ 2.1
  • Microsoft Visual C++ 2.2
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
Kľúčové slová: 
kbcrt kbhowto kbmt KB140584 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem: 140584

Odošlite odozvu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com