Domanda

ho trovato altri esempi di persone che hanno questo problema, ma non hanno avuto fortuna con le loro soluzioni. Sto cercando di usare std :: cout in una libreria statica che utilizza anche le discussioni Boost e legano. Quando io non uso e std::cout si compila e link bene con il programma principale, ma quando lo faccio e mi compilare la libreria non ho problemi, ma quando ho compilare e collegare il programma principale che utilizza la libreria statica ho un sacco di cose come:

2>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_z already defined in MSVCRTD.lib(cinitexe.obj)
2>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in MSVCRTD.lib(cinitexe.obj)
2>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in MSVCRTD.lib(cinitexe.obj)
2>LIBCMT.lib(mlock.obj) : error LNK2005: __unlock already defined in MSVCRTD.lib(MSVCR100D.dll)
2>LIBCMT.lib(mlock.obj) : error LNK2005: __lock already defined in MSVCRTD.lib(MSVCR100D.dll)
2>LIBCMT.lib(winxfltr.obj) : error LNK2005: __XcptFilter already defined in MSVCRTD.lib(MSVCR100D.dll)
2>LIBCMT.lib(crt0.obj) : error LNK2005: _mainCRTStartup already defined in MSVCRTD.lib(crtexe.obj)

ecc ...

ho cercato di andare a mie impostazioni linker e l'arresto da utilizzando la libreria in conflitto elencate nell'output errore, ma non riesco a farlo bene. Se dico di smettere di usare una libreria che potrebbe risolvere i problemi, ma mi dia un paio di simboli esterni mancanti, quindi posso passare la biblioteca stava avendo problemi con, ma ho ancora ottenere qualche "già definito". Eventuali indizi di ciò che posso fare per risolvere questo problema? Devo solo fare un altro classe chiamata "log" o qualcosa e semplicemente accedervi dal exe principale (che sarebbe utilizzare la libreria stringhe, che può causare problemi ancora una volta, ma non l'ho ancora provato)? Grazie per tutto l'aiuto.

È stato utile?

Soluzione

Prova a controllare -> Progetto + Proprietà, C / C ++, generazione di codice, libreria runtime. Il tuo Lib e il vostro progetto principale devono utilizzare la stessa impostazione qui.

Altri suggerimenti

Fare clic con il progetto, Proprietà, C / C ++, generazione di codice, impostazione Runtime Library. Questa è la causa del problema. Impostazioni ci sono / MT e / MD. Si sta collegando codice che è in conflitto valori per questa impostazione, tutto deve essere compilato con la stessa.

Boost potrebbe essere quello. Controllare l'impostazione Dipendenze aggiuntive del linker. IIRC, i .libs hanno mt o md nel loro nome.

LNK2005 si verifica quando due oggetti di compilazione contengono gli stessi simboli. Quando si tenta di collegarli tra loro, il linker non sa cosa fare con il fatto che ha duplicati di tutto, da qui l'errore.

In particolare, sembra che il tuo lib statica / forse spinta può essere stato compilato con /MT che collega il runtime MSVC in modo statico. Sembra che si sta tentando di compilare il codice con le opzioni di default (/MD, un collegamento dinamico per MSVCR100.DLL, MSVCP100.DLL).

http://msdn.microsoft.com/en-us/library /2kzt1wy3.aspx

È possibile sia ricostruito detto libreria statica assicurando è collegato contro le librerie dinamiche, o provare il codice collegata in modo statico.

Vorrei aggiungere che il D alla fine significa solo debug. vale a dire MSVCP100D.DLL è la versione di debug di MSVCP100.DLL.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top