Problema:Errore di collegamento: xxx è già definito in *****. LIB :: Cosa è esattamente sbagliato?
Sto cercando di utilizzare una libreria denominata DCMTK che ha usato alcune altre librerie esterne (zlib, libtiff, libpng, libxml2, libiconv). Ho scaricato queste librerie esterne (* .LIB & * .h file) dallo stesso sito web. Ora, quando compilo la biblioteca DCMTK sto ricevendo errori di collegamento (793 errori) in questo modo:
Error 2 error LNK2005: __encode_pointer already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib dcmmkdir
Error 3 error LNK2005: __decode_pointer already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib dcmmkdir
Error 4 error LNK2005: __CrtSetCheckCount already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib dcmmkdir
Error 5 error LNK2005: __invoke_watson already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib dcmmkdir
Error 6 error LNK2005: __errno already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib dcmmkdir
Error 7 error LNK2005: __configthreadlocale already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib dcmmkdir
Error 8 error LNK2005: _exit already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib dcmmkdir
Documentazione:
Questo sembra essere un errore popolare per questa libreria in modo, che fanno avere una voce FAQ affrontare questo problema, che (http://forum.dcmtk.org/viewtopic.php?t=35) dice:
- il problema è che il linker cerca di combinare diverso, versioni incompatibili della libreria di runtime Visualin un singolo binario .
- Ciò accade quando non tutte le parti del progetto e le librerie collegate a sono generate con le stesse opzioni di generazione del codice in Visual C++.
Non utilizzare la soluzione/NODEFAULTLIB, poiché potrebbero verificarsi errori anomali del software . Risolvi il problema!
DCMTK è predefinita compilato con l'opzione "Multithreading debug" generazione di codice "Multithreading" o (la quest'ultimo per la modalità di debug).
- sia cambiare le impostazioni del progetto di tutto il codice per utilizzare questi codice opzioni di generazione,
- o modificare il codice di generazione per tutti i moduli DCMTK e ri-compilazione.
- utenti MFC attenzione: DCMTK deve essere compilato con "Multithreading DLL" o "Multithreading DLL Debug" impostazioni se che si desidera collegare le librerie in un'applicazione MFC.
soluzione per lo stesso problema per gli altri:
Huge Amount of Linker Issues with Release Build Only dice:
La tua build di rilascio è cercando di collegare a qualcosa che era di debug integrata. Probabilmente hai una dipendenza interrotta da nella tua build, (o hai mancato di ricostruire qualcosa a versione a mano se il tuo progetto è normalmente costruito a pezzi).
Più tecnicamente, ti sembra di essere che collegano i progetti realizzati con diverse
C Run Time library
impostazioni, uno con "Multi-Threaded", l'un l'altro con "Multi-Threaded Debug".Regolare le impostazioni per tutti i progetti per utilizzare lo stesso sapore della biblioteca e la questione dovrebbe andare via
Domande:
Fino ad ora ho usato pensare che mutilazione dei nomi è il solo problema che potrebbe causare errori di collegamento se non è stato standardizzato. Proprio ora so che ci sono anche altre cose che possono causare lo stesso effetto.
cosa è in su con il "Debug Mode" (Multi-Threaded debug) e "modalità di rilascio" (Multi-Threaded)? Cosa sta facendo esattamente sotto il cofano? Perché esattamente questa cosa sta causando un errore di collegamento?
Mi chiedo se c'è qualcosa chiamato "Debug a thread singolo" e "Single-Threaded" che di nuovo causa la stessa cosa.
La documentazione parla di "Opzioni di generazione del codice". Quali opzioni di generazione del codice? WTH sono?
La documentazione in particolare ci avvisa di non utilizzare/soluzione NODEFAULTLIB. (esempio/NODEFAULTLIB: msvcrt). Perché? Come potrei causare problemi? cos'è esattamente?
- Spiegare l'ultimo punto della documentazione per gli utenti MFC. Perché userò MFC più avanti in questo progetto. Spiega perché dovremmo farlo? Quali problemi causerebbe se non lo facessi.
- Qualcosa di più che vorresti menzionare? Intendo riguardo a errori simili. Sono molto interessato a Linker & i suoi problemi. Quindi, se ci sono cose simili puoi menzionarle o alcune parole chiave almeno.