Verknüpfen mit die richtige C Run-Time (CRT) Bibliothek

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 140584 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Es gibt sechs Arten von wiederverwendbaren Bibliotheken:
  • Statische Single Threaded Library (Debug/Release)
  • Statische multithreaded-Bibliothek (Debug/Release)
  • Dynamic Link Library (DLL)(Debug/Release)
Hinweis: Jeder Bibliothek hat eine Debugversion und eine veröffentlichte Version.

Die DLL ist threadsicher Multithread- und eine Single-Thread-Version der CRT-Bibliothek ist nicht für DLLs bereitgestellt. Wenn mehrere Threads wiederverwendbare Bibliothek oder ein Benutzer von der Bibliothek verwendet wird, muss der Bibliothek ein multithread-safe Bibliothek sein.

Hinweis: Debugbibliotheken und Compilerschalter/MLD binden, / MTd und/MDd sind nur in Visual C++-Versionen 4.0 und höher verfügbar.

Die folgende Tabelle zeigt welche Compilerschalter für das Erstellen der sechs Arten von wiederverwendbaren Bibliotheken (alle DLL-Typen sind threadsicher Multithread-) verwendet werden soll. Jedes Projekt, das wiederverwendbare Bibliothek verwendet sollten die gleichen Compiler Option verwenden. Wenn Compilerschalter /ML(default), / MLd, / MT, / MTd, MD, oder/MDd verwenden, setzt der Compiler den Standardnamen Bibliothek (aufgeführt in der Bibliothek-Spalte) in der Objektdatei.
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
				
können Sie ein Objektmodul zu bestimmen, welche Option verwendet wurde, wenn es erstellt wurde, mithilfe dieses Befehls anzeigen:
   dumpbin /all <object>.obj
				
im Abschnitt ? RAW DATA # 1 suchen. In der Spalte ganz rechts werden die Standardbibliotheken aufgelistet.

Weitere Informationen

Eine wiederverwendbare Bibliothek und alle seine Benutzer sollten die gleichen CRT Bibliothek Typen und daher den gleichen Compilerschalter verwenden. Die Makros definiert (oder nicht definiert) für jede der Compiler Schalter zum Erzwingen auf Header-Dateien von Ihrem wiederverwendbare Bibliothek verwendet werden können den richtige Compilerschalter. Der Beispielcode in diesem Artikel veranschaulicht diese Makros verwenden.

Wenn Sie Benutzer von der Bibliothek können statische auswählen oder CRT-DLL erhalten möchten, sollten Sie sowohl statische als auch DLL wiederverwendbare Bibliothek Typen bereitstellen.

Sie Wenn CRT-Bibliotheken mischen, müssen Bedenken Sie, dass Sie zwei separate Kopien der CRT mit separaten und unterschiedlichen Zuständen verfügen, sodass Sie überlegen, was Sie versuchen über eine CRT-Grenze sein müssen. Es gibt viele Möglichkeiten in Probleme mit zwei CRTs zu erhalten. Hier sind nur wenige:
  • Es gibt zwei separate Heaps. Kann nicht reserviert werden (explizit mit neuen, Malloc oder so auf-- oder implizit mit Strdup, strstreambuf::str oder usw.), und übergeben Sie den Mauszeiger über einem CRT-Grenze freigegeben werden.
  • Nicht möglich, ein Handle für Datei 1 oder eine Datei über eine CRT-Grenze übergeben und erwarten, dass die "Stdio Low-Level IO" arbeiten.
  • Das Gebietsschema in einer festgelegt kann nicht und erwarten, dass der andere Gebietsschema festgelegt werden.
Mit Visual C++ 4.0 beginnen, wird der Linker ausgeben eine Warnung (LNK4098), wenn ein resultierenden Modul versucht, mehr als eine Kopie der CRT-Bibliothek zu kombinieren. Suchen Sie weitere Informationen in der Hilfe-Datei für LNK4098.

Beispielcode

Der folgende Code kann in der wiederverwendbare Bibliothek Headerdatei verwendet werden, damit die konsistente Verwendung der richtigen Compilerschalter:
// 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
				

Eigenschaften

Artikel-ID: 140584 - Geändert am: Donnerstag, 1. Juli 2004 - Version: 3.1
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual C++ 2.0 Professional Edition
  • Microsoft Visual C++ 2.1
  • Microsoft Visual C++ 2.2
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 4.1 Subscription
  • Microsoft Visual C++ 4.2 Professional Edition
  • Microsoft Visual C++ 4.2 Professional Edition
  • Microsoft Visual C++ 5.0 Standard Edition
  • Microsoft Visual C++ 6.0 Service Pack 5
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
Keywords: 
kbmt kbcrt kbhowto KB140584 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 140584
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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