Связывание googleTest в VS2010 приводит к LNK2005 из-за других зависимых библиотек

У меня есть большой и сложный проект, который, наконец, получает модульные тесты. Я создал googleTest 1.6.0 локально с помощью Visual Studio 2010, файлы проекта были созданы с помощью cmake, как указано в README.

В этом проекте есть много зависимых библиотек, которые статически и динамически связаны. Многие из них проприетарные. Все попытки связать приводят к 220 таким ошибкам. Вот пример:

msvcprtd.lib (MSVCP100D.dll): ошибка LNK2005: "public: void __cdecl std :: _ Container_base12 :: _ Orphan_all (void)" (? _Orphan_all @ _Container_base12 @ std @@ QEAAXXZ) уже определено в gtest.lib (gtest-all.obj)

libcpmtd.lib (cerr.obj): error LNK2005: "protected: char * __cdecl std :: basic_streambuf> :: _ Gndec (void)" (? _Gndec @? $ basic_streambuf @DU? $ Char_traits @ D @ std @@@ std @@ IEAAPEADXZ) уже определено в msvcprtd.lib (MSVCP100D.dll)

LIBCMTD.lib (setlocal.obj): ошибка LNK2005: _configthreadlocale уже определено в MSVCRTD.lib (MSVCR100D.dll)

ССЫЛКА: предупреждение LNK4098: defaultlib 'MSVCRTD' конфликтует с использованием других библиотек; используйте / NODEFAULTLIB: библиотека ССЫЛКА: предупреждение LNK4098: defaultlib 'LIBCMTD' конфликтует с использованием других библиотек; используйте / NODEFAULTLIB: библиотека

фатальная ошибка LNK1169: обнаружен один или несколько многократно определенных символов

Я пробовал использовать флаг / NODEFAULTLIB, и я пытался игнорировать только msvcprtd.lib, MSVCRTD.lib и LIBCMTD.lib, как было предложено, но потом я страдаю от неразрешенных символов ...

И проект, и googleTest скомпилированы с использованием x64, / MP, / MDd и без / clr.

Я играл с флагами компилятора, задаваясь вопросом, есть ли какое-то несоответствие версий. Dumpbin, насколько я понимаю, не намекал ни на что, что я мог бы понять. Я надеялся на ошибку er

7
задан Matthew Reddington 19 September 2011 в 20:28
поделиться