2012-03-29 1 views
5

Ho installato il test di google come descritto: here. Ma quando provo a utilizzare i test per il mio progetto corrente, ottengo 2 avvisi LNK4098:Esecuzione gtest utilizzando Visual Studio 2010: LNK4098 e LNK2005

defaultlib "MSVCRTD" è in conflitto con l'uso di altre librerie; utilizzare/NODEFAULTLIB: libreria

e lo stesso per "LIBCMTD" e un sacco di errori LNK2005. Ma quando effettivamente ignoro queste due librerie predefinite, non aiuta: ottengo ancora più errori. Qual è il problema?

+2

Hai letto le risposte che hai collegato a come tutto deve essere creato utilizzando la stessa configurazione della libreria di runtime? L'errore che si sta facendo sembra che alcune parti siano costruite usando il runtime non di debug e altre create usando il runtime di debug. –

risposta

6

È necessario garantire googletest e il progetto viene creato utilizzando la stessa versione della libreria di runtime C (CRT). Google test (attualmente v1.6.0) fornisce 2 file di soluzione di Visual Studio; gtest-1.6.0\msvc\gtest.sln che utilizza la versione statica e gtest-1.6.0\msvc\gtest-md.sln che utilizza la versione dinamica (dll). Per impostazione predefinita, i progetti creati tramite Visual Studio utilizzano la versione dll.

È necessario decidere se si desidera che il progetto utilizzi le versioni statiche o dinamiche del CRT.

Per impostare il progetto in modo che utilizzi le versioni statiche, andare a Project->Properties e in alto a sinistra nella finestra, selezionare Configurazione: Debug. Quindi in questa stessa finestra selezionare Configuration Properties ->C/C++ ->Code Generation. L'opzione per Runtime Library dovrebbe essere Multi-threaded Debug (/MTd).

è quindi necessario per garantire la collega alle versioni appropriate di GTEST, in modo da selezionare Configuration Properties ->Linker ->Input. Modifica il campo Additional Dependencies fornendo il percorso completo della versione Debug della libreria gtest (ad esempio C:\gtest-1.6.0\msvc\gtest\Debug\gtestd.lib).

fare lo stesso ancora una volta per la configurazione di uscita, ma impostando l'opzione Runtime Library per Multi-threaded (/MT) e di fornire il percorso completo alla versione della libreria GTEST (ad esempio C:\gtest-1.6.0\msvc\gtest\Release\gtest.lib).

Se si decide che si desidera utilizzare le versioni DLL del CRT, scegliere Multi-threaded Debug DLL (/MDd) e Multi-threaded DLL (/MD), e il link alle librerie GTEST-md che saranno in gtest-1.6.0\msvc\gtest-md\... piuttosto che gtest-1.6.0\msvc\gtest\....