Работа с Gtest и Gmock в Windows

У меня проблема с запуском Gtest и Gmock в Windows10. Обычно я работаю в Linux, но хотел переключиться на Windows и столкнулся с проблемой.

Мне удалось собрать Gmock и Gtest по документации (с помощью Cmake и Visual Studio). У меня есть файлы gmock.lib и gtest.lib в соответствующих каталогах. Но когда я хочу связать их со своей тестовой программой, я вижу десятки ошибок типа "неопределенная ссылка".

Я использую команду:

g++ "-LC:\\Users\\jacek\\cpp\\googletest\\googlemock\\Debug" "-LC:\\Users\\jacek\\cpp\\googletest\\googlemock\\gtest\\Debug" -o HelloWorld "src\\counter.o" "src\\counter_test.o" -lgmock -lgtest

Ошибки, например:

C:\Users\jacek\workspace\HelloWorld\Debug/../src/counter_test.cpp:14: undefined reference to testing::Message::Message()' C:\Users\jacek\workspace\HelloWorld\Debug/../src/counter_test.cpp:14: undefined reference to testing::internal::AssertHelper::AssertHelper(testing::TestPartResult::Type, char const*, int, char const*)'

Я попытался найти это и обнаружил, что, возможно, мне следует создавать общие библиотеки. Я пересобрал gmock и gtest с соответствующей опцией, теперь у меня также есть файлы dll, но я получаю все те же ошибки.

Что я здесь делаю неправильно?

Может быть проблема в том, что библиотеки в Linux называются иначе, чем в Windows? (libgmock.a vs gmock.lib) Должен ли я изменить что-то в команде на g++ из-за этого?

Пути вставил хорошие, файлы есть (иначе ошибка была бы другая).

Что мне здесь не хватает?


person YotKay    schedule 21.12.2016    source источник
comment
Хорошо, я решил проблему. Оказалось, что я не могу скомпилировать библиотеки с помощью Visual Studio, а затем использовать их с G++. Мне пришлось переключиться на другой подход, и это видео оказалось очень полезным: youtube.com /   -  person YotKay    schedule 23.12.2016


Ответы (2)


в дополнение к вашему правильному ответу: если вы хотите работать с внешними библиотеками (например, gmock или gtest), вы должны скомпилировать библиотеки И свою программу с помощью одного и того же компилятора. И именно поэтому ваша программа выдает ошибку с неопределенной ссылкой. В Visual Studio есть компилятор MSVC. Если вы хотите работать с VS, то просто скомпилируйте свою программу также с VS. И это еще не все, вы должны использовать тот же компилятор и те же настройки (например, компиляция в режиме отладки)

Я просто хотел добавить это к вашему ответу. Из-за тебя написал:

Оказалось, что я не могу компилировать библиотеки с помощью Visual Studio

и это неправильно, вы можете скомпилировать библиотеки с помощью VS, но вы не можете связать их со своей программой. Возможно, это уже было ясно, тогда извините за ответ.

person Soeren    schedule 31.01.2017

Хорошо, я решил проблему. Оказалось, что я не могу скомпилировать библиотеки с помощью Visual Studio, а затем использовать их с G++. Мне пришлось переключиться на другой подход, и это видео оказалось очень полезным: https://www.youtube.com/watch?v=y9sGAF1k63o&list=PL0SUKxlBaq1COi52nuq2lPf6AbMRrn2LI&index=7

Видео учит, как использовать gtest с Eclipse, но не с использованием библиотеки, а слиянием файлов cpp и h из скрипта gtest. Это работает нормально. Единственная проблема, с которой я столкнулся, это то, что я установил версию python 3.5, и в некоторых случаях она не имеет обратной совместимости с python 2.7, используемым в сценарии 'fuse', но мне удалось быстро исправить эти несколько случаев и заставить его работать.

person YotKay    schedule 23.12.2016