Perché la libreria MSCVRT generare conflitti in fase di collegamento? [duplicare]
-
23-09-2019 - |
Domanda
Questa domanda ha già una risposta qui:
- conflitti defaultlib 'MSVCRT' con : Risoluzione LNK4098 5 risposte
Sto costruendo un progetto in Visual C ++ 2008, che è un app esempio MFC-based per una libreria statica classe C ++ userò nel mio progetto al più presto. Mentre la costruzione della configurazione di debug, ottengo il seguente:
warning LNK4098: defaultlib conflitti 'MSVCRT' con utilizzo di altre librerie; uso / NODEFAULTLIB: libreria
Dopo aver usato l'opzione raccomandata (con l'aggiunta di "msvcrt" al campo "Ignora libreria specifica" nelle impostazioni del linker di progetto per la configurazione di debug), i collegamenti di programma e funziona bene. Tuttavia, mi piacerebbe scoprire perché questo conflitto si è verificato, perché devo ignorare una biblioteca critica, e se sono ad aspettarsi problemi in seguito ho se aggiungo la ignorano, o che cosa succede se non lo faccio (perché il programma si basa in ogni caso).
Al tempo stesso, la configurazione di rilascio avverte:
LNK4075 avvertimento: ignorando '/ EDITANDCONTINUE' a causa di '/ OPT: ICF' specifica
avviso LNK4098: defaultlib conflitti 'MSVCRTD' con utilizzo di altre librerie; uso / NODEFAULTLIB: libreria
Sto indovinando che il suffisso "D" significa che questo è la versione di debug del runtime VC ++, idea del perché questo si abitua questa volta. In ogni caso, aggiungendo "msvcrtd" al campo di ignorare le provoca un sacco di errori di collegamento del modulo:
errore LNK2001: simbolo esterno non risolto __imp ___ CrtDbgReportW
Tutta la comprensione molto apprezzato.
Soluzione
Questo di solito accade quando si collega contro una libreria statica che utilizza un'altra versione del runtime VC ++ (impostazione C++ ->Code Generation->Runtime Library
nelle proprietà del progetto).
Altri suggerimenti
Questo di solito è successo a me quando ero (involontariamente) mescolando diverse sapori della RTL, come (come sembra essere nel tuo caso) Debug e Release o MT e ST.