googletest vs2010 编译问题

问题

编译googletest开源项目,始终有一个工程(gtest_unittest,gtest自测工程)无法编译通过。
项目地址:google/googletest
分支版本:1.8.x
编译问题:

3>..\..\test\gtest_unittest.cc(7598): error C2653: '__gnu_cxx' : is not a class or namespace name
3>..\..\test\gtest_unittest.cc(7598): error C2065: 'hash_set' : undeclared identifier
3>..\..\test\gtest_unittest.cc(7598): error C2062: type 'int' unexpected
3>..\..\test\gtest_unittest.cc(7598): error C2039: 'value' : is not a member of '`global namespace''
3>..\..\test\gtest_unittest.cc(7598): error C2059: syntax error : ')'
3>..\..\test\gtest_unittest.cc(7598): error C2059: syntax error : ')'
3>..\..\test\gtest_unittest.cc(7598): error C2143: syntax error : missing ',' before ')'
3>..\..\test\gtest_unittest.cc(7600): error C2143: syntax error : missing ';' before '}'
3>..\..\test\gtest_unittest.cc(7604): error C2143: syntax error : missing ';' before '{'

环境

OS: Windows 10 家庭中文版
IDE: Visual Studio 2010 Ultimate

分析

出问题的代码是这里,提示__gun_cxx命名空间无法找到。

#if GTEST_HAS_HASH_SET_
  EXPECT_TRUE(testing::internal::IsHashTable<__gnu_cxx::hash_set>::value);
#endif  // GTEST_HAS_HASH_SET_

在网上找了一些资料,好像大家也都没有遇到这个问题,这让人很头疼。

// Determines if hash_map/hash_set are available.
// Only used for testing against those containers.
#if !defined(GTEST_HAS_HASH_MAP_)
# if defined(_MSC_VER) && (_MSC_VER < 1900)
#  define GTEST_HAS_HASH_MAP_ 1  // Indicates that hash_map is available.
#  define GTEST_HAS_HASH_SET_ 1  // Indicates that hash_set is available.
# endif  // _MSC_VER
#endif  // !defined(GTEST_HAS_HASH_MAP_)

上面这段代码应该是已经处理过了相关编译的问题,但我的环境并不可以解决问题。
只能把GTEST_HAS_HASH_SET_强制设置为0,关闭对hash_set的支持了。
# define GTEST_HAS_HASH_SET_ 0 // Indicates that hash_set is available.

你可能感兴趣的:(googletest vs2010 编译问题)