问题
编译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<int>>::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.