版本依赖关系
目前支持到VS2013的版本是1.8.0
1.8.x版本及以上要求必须是VS2015及以上版本才行。
引入gmock时遇到的问题
error LNK2001:无法解析的外部符号 “class testing::internal::Mutex testing::internal::g_linked_ptr_mutex” (?g_linked_ptr_mutex@internal@testing@@3VMutex@12@A)
error LNK2001:无法解析的外部符号 “class testing::internal::Mutex testing::internal::g_gmock_mutex” (?g_gmock_mutex@internal@testing@@3VMutex@12@A)
这两行会出现在所有你mock函数之后的obj中。
原因:在gtest_linked_ptr.h中有这么个宏 GTEST_API_ GTEST_DECLARE_STATIC_MUTEX_(g_linked_ptr_mutex);
其定义:# define GTEST_DECLARE_STATIC_MUTEX_(mutex) extern ::testing::internal::Mutex mutex,那么就需要有全局定义的g_linked_ptr_mutex才行。这个需要打开GTEST_LINKED_AS_SHARED_LIBRARY宏
解决办法:增加预处理器宏 GTEST_LINKED_AS_SHARED_LIBRARY
而我们的gtest工程的main函数从gmock_main拷贝的如下:
GTEST_API_ int main(int argc, char** argv) {
std::cout << "Running main() from gmock_main.cc\n";
// Since Google Mock depends on Google Test, InitGoogleMock() is
// also responsible for initializing Google Test. Therefore there's
// no need for calling testing::InitGoogleTest() separately.
testing::InitGoogleMock(&argc, argv);
return RUN_ALL_TESTS();
}
GTEST_API_宏在声明了 GTEST_LINKED_AS_SHARED_LIBRARY之后,其展开为 dllimport的声明,因此出现如上问题,若main函数前有GTEST_API_宏,去掉即可解决。