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