Condividi tramite


Avviso degli strumenti del linker LNK4098

defaultlib 'library' è in conflitto con l'uso di altre librerie; usare /NODEFAULTLIB:library

Si sta provando a collegare librerie incompatibili.

Nota

Le librerie di runtime contengono ora direttive per impedire la combinazione di tipi diversi. Questo avviso verrà visualizzato se si tenta di usare tipi diversi o versioni di debug e non di debug della libreria di runtime nello stesso programma. Ad esempio, se è stato compilato un file per usare un tipo di libreria di runtime e un altro file per usare un altro tipo (ad esempio, debug e vendita al dettaglio) e si è tentato di collegarli, verrà visualizzato questo avviso. È necessario compilare tutti i file di origine per usare la stessa libreria di runtime. Per altre informazioni, vedere le opzioni del compilatore /MD, /MT, /LD (Use Run-Time Library).

È possibile usare l'opzione /VERBOSE:LIB del linker per scoprire quali librerie cercano il linker. Ad esempio, quando l'eseguibile usa le librerie di runtime multithread, non di debug, l'elenco segnalato deve includere LIBCMT.lib e non LIBCMTD.lib, MSVCRT.lib o MSVCRTD.lib. È possibile indicare al linker di ignorare le librerie di runtime non corrette usando /NODEFAULTLIB per ogni libreria da ignorare.

La tabella seguente mostra quali librerie devono essere ignorate a seconda della libreria di runtime da usare. Nella riga di comando usare un'opzione /NODEFAULTLIB per ogni libreria da ignorare. Nell'IDE di Visual Studio separare le librerie da ignorare da punti e virgola nella proprietà Ignora librerie predefinite specifiche.

Per usare questa libreria di runtime Ignorare queste librerie
Multithreading (libcmt.lib) msvcrt.lib; libcmtd.lib; msvcrtd.lib
Multithreading con DLL (msvcrt.lib) libcmt.lib; libcmtd.lib; msvcrtd.lib
Eseguire il debug multithreading (libcmtd.lib) libcmt.lib; msvcrt.lib; msvcrtd.lib
Eseguire il debug di multithreading tramite DLL (msvcrtd.lib) libcmt.lib; msvcrt.lib; libcmtd.lib

Ad esempio, se si riceve questo avviso e si vuole creare un file eseguibile che usa la versione dll non di debug delle librerie di runtime, è possibile usare le opzioni seguenti con il linker:

/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib