Come collegare alla libreria di runtime C (CRT) corretto

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 140584
Questo articolo è stato archiviato. L’articolo, quindi, viene offerto “così come è” e non verrà più aggiornato.
Sommario
Esistono sei tipi di librerie riutilizzabili:
  • Single statica a thread libreria (debug/versione)
  • Libreria multithread statica (debug/versione)
  • Dinamico Libreria a collegamento (DLL)(Debug/Release)
Nota Ogni libreria dispone di una versione di debug e di una versione.

La DLL è indipendente con multithreading e una versione a thread singolo della libreria CRT non deriva per DLL. Se più thread utilizza la libreria riutilizzabile o qualsiasi utente della libreria, la libreria deve essere un tipo di libreria indipendente con multithreading.

Nota Librerie di debug e opzioni del compilatore /MLD, /MTd e /MDd sono disponibili solo nelle versioni di Visual c ++ 4.0 e versioni successive.

Nella tabella seguente vengono illustrati il quale opzione di compilatore dovrebbe essere utilizzata per la creazione di ciascuno dei sei tipi di librerie riutilizzabili (tutti i tipi DLL sono indipendenti con multithreading). Qualsiasi progetto che utilizza la libreria riutilizzabile utilizzare l'opzione del compilatore stesso. Quando si utilizzano le opzioni del compilatore /ML(default), / MLd, / MT, MTd, /MD o /MDd, il compilatore inserisce il nome di libreria predefinito (elencato nella colonna Library) nel file oggetto.
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				
è possibile visualizzare un modulo di oggetto per determinare quale opzione è stato utilizzato quando è stata generata utilizzando questo comando:
   dumpbin /all <object>.obj				
Cerca nella sezione RAW DATA # 1. Nella colonna più a destra, verranno elencate le librerie predefinite.
Informazioni
Una libreria riutilizzabile e tutti i relativi utenti devono utilizzare i tipi di libreria CRT stessi e, pertanto, la stessa opzione del compilatore. Le macro definite (o non definito) per ciascuno del compilatore opzioni possono essere utilizzate nei file di intestazione della libreria riutilizzabile per applicare l'opzione del compilatore appropriato. Il codice di esempio in questo articolo viene illustrato come utilizzare queste macro.

Se si desidera che gli utenti della libreria per poter scegliere statico o la DLL CRT, è necessario fornire sia statici e tipi DLL libreria riutilizzabile.

Se si desidera combinare librerie CRT, è necessario ricordarsi di avere due copie separate di CRT, con stati separati e distinti, pertanto deve essere attenzione a ciò che si tenta di eseguire attraverso un limite di CRT. Esistono molti modi per usufruire di problemi con due CRTs. Di seguito ne sono elencati alcuni:
  • Esistono due heap separato. È Impossibile allocare (in modo esplicito con nuovo malloc, o in tal caso, o in modo implicito con strdup, strstreambuf::str e così via) e quindi passare il puntatore attraverso un limite di CRT che sarà liberato.
  • Non è possibile passare un handle di file o FILE * oltre un limite di CRT e prevede il "stdio I/O di basso livello" per l'utilizzo.
  • Non è possibile impostare le impostazioni internazionali in uno e previsto delle impostazioni di altro internazionali da impostare.
A partire da Visual c ++ 4.0, il linker verrà visualizzato un messaggio di avviso (LNK4098) se un modulo risultante tenta di combinare più di una copia della libreria CRT. Per ulteriori informazioni, cercare il file della Guida per LNK4098.

Codice di esempio

Il codice riportato di seguito sono utilizzabili in file di intestazione della libreria riutilizzabile per garantire l'utilizzo coerenza dell'opzione del compilatore corretto:
// 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				

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 140584 - Ultima revisione: 12/04/2015 12:31:23 - Revisione: 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 KbMtit
Feedback