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

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
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
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     _MTDynamic Link (DLL)          /MD       MSVCRT     _MT and _DLLDebug Single Threaded       /MLd      LIBCD      _DEBUGDebug Static MultiThread    /MTd      LIBCMTD    _DEBUG and _MTDebug 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				

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 140584 – Letzte Überarbeitung: 12/04/2015 12:31:19 – Revision: 3.1

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

  • kbnosurvey kbarchive kbmt kbcrt kbhowto KB140584 KbMtde
Feedback