Come collegare alla libreria di runtime C (CRT) corretto

Traduzione articoli Traduzione articoli
Identificativo articolo: 140584 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

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     _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
				
è 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
				

Proprietà

Identificativo articolo: 140584 - Ultima modifica: giovedì 1 luglio 2004 - Revisione: 3.1
Le informazioni in questo articolo si applicano a:
  • 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
Chiavi: 
kbmt kbcrt kbhowto KB140584 KbMtit
Traduzione automatica articoli
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
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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