Запуск gtest с использованием Visual Studio 2010: LNK4098 и LNK2005 - PullRequest
6 голосов
/ 29 марта 2012

Я установил тест Google, как описано здесь .Но когда я пытаюсь использовать тесты для моего текущего проекта, я получаю 2 предупреждения LNK4098:

defaultlib 'MSVCRTD' конфликтует с использованием других библиотек;используйте / NODEFAULTLIB: библиотека

и то же самое для 'LIBCMTD', а также кучу ошибок LNK2005.Но когда я фактически игнорирую эти две библиотеки по умолчанию, это не помогает: я получаю еще больше ошибок.В чем проблема?

1 Ответ

7 голосов
/ 30 марта 2012

Вы должны убедиться, что googletest и ваш проект созданы с использованием одной и той же версии C Runtime Library (CRT). Тест Google (в настоящее время v1.6.0) предоставляет 2 файла решения Visual Studio; gtest-1.6.0\msvc\gtest.sln, которая использует статическую версию, и gtest-1.6.0\msvc\gtest-md.sln, которая использует динамическую (dll) версию. По умолчанию проекты, созданные в Visual Studio, используют версию dll.

Вам необходимо решить, хотите ли вы, чтобы ваш проект использовал статическую или динамическую версии CRT.

Чтобы настроить ваш проект на использование статических версий, перейдите на Project->Properties и в левом верхнем углу окна выберите Конфигурация: Debug. Затем в этом же окне выберите Configuration Properties -> C/C++ -> Code Generation. Параметр для Runtime Library должен быть Multi-threaded Debug (/MTd).

Затем вам необходимо убедиться, что вы ссылаетесь на соответствующие версии gtest, поэтому выберите Configuration Properties -> Linker -> Input. Отредактируйте поле Additional Dependencies, указав полный путь к отладочной версии библиотеки gtest (например, C:\gtest-1.6.0\msvc\gtest\Debug\gtestd.lib).

Повторите то же самое для конфигурации выпуска, но установите для параметра Runtime Library значение Multi-threaded (/MT) и укажите полный путь к версии выпуска библиотеки gtest (например, C:\gtest-1.6.0\msvc\gtest\Release\gtest.lib).

Если вы решите, что хотите использовать dll-версии CRT, выберите Multi-threaded Debug DLL (/MDd) и Multi-threaded DLL (/MD) и создайте ссылку на библиотеки gtest-md, которые будут в gtest-1.6.0\msvc\gtest-md\... вместо gtest-1.6.0\msvc\gtest\....

...