首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将GTest集成到我的项目时gtest-printers.h出错

将GTest集成到我的项目时gtest-printers.h出错
EN

Stack Overflow用户
提问于 2012-01-02 18:00:57
回答 2查看 1.5K关注 0票数 1

我在构建我的项目时遇到以下错误

代码语言:javascript
复制
C:\gtest\gtest-1.6.0\include\gtest/gtest-printers.h(327) : error C2220: warning treated as error - no 'object' file generated
C:\gtest\gtest-1.6.0\include\gtest/gtest-printers.h(376) : see reference to function template instantiation 'void testing::internal::DefaultPrintTo<const void>(testing::internal::IsNotContainer,testing::internal::true_type,T *,std::ostream *)' being compiled
    with
    [
        T=const void
    ]
    C:\gtest\gtest-1.6.0\include\gtest/gtest-printers.h(416) : see reference to function template instantiation 'void testing::internal::PrintTo<To>(const T &,std::ostream *)' being compiled
    with
    [
        To=const void *,
        T=const void *
    ]
C:\gtest\gtest-1.6.0\include\gtest/gtest-printers.h(327) : warning C4826: Conversion from 'const void *' to 'testing::internal::UInt64' is sign-extended. This may cause unexpected runtime behavior.

我已经按如下方式初始化了InitGoogleTest:

代码语言:javascript
复制
void startGTest()
{

char *option[] = { "test.exe", //it doesn't have meaning, just dummy
               "--gtest_output=xml:gTestResults.xml" };
int argc = 2;

testing::InitGoogleTest(&argc, option);
RUN_ALL_TESTS(); 
}

更多信息,

代码语言:javascript
复制
int main(int argc, char** argv) 
{ 
char *option[] = { "test.exe", //it doesn't have meaning, just dummy
           "--gtest_output=xml:gTestResults.xml" };
int myargc = 2;
testing::InitGoogleTest(&myargc, option);
RUN_ALL_TESTS(); 
getchar(); // keep console window open until Return keystroke
}

也会抛出错误,

代码语言:javascript
复制
1>c:\...\gtestfactorial\gtestfactorial\gtestfactorial.cpp(4) : error C2220: warning treated as error - no 'object' file generated

如果在项目属性中按如下所示更改编译器设置,

c/c++ ->将警告视为错误-> NO

然后我就可以构建和运行了。

EN

回答 2

Stack Overflow用户

发布于 2012-01-26 00:54:23

我猜你得到这个错误是因为你在64位机器上交叉编译32位平台。我也明白,这就是我正在做的事情。微软的documentation

此警告表示当32位指针强制转换为64位变量时,编译器执行了符号扩展。

默认情况下,此警告处于关闭状态,但Google将警告设置为错误,以确保任何人都可以使用其产品进行构建。你可以关闭它,但微软表示,如果在转换指针类型时发生错误,手动禁用符号扩展会更安全,这就是这里所发生的情况。

在我这边,我最终使用以下命令修改了生成错误的代码:

代码语言:javascript
复制
// Disable this code for cross compiling on 32 bits machine
// GTEST_OS_WINDOWS will always be defined when compiling on a Windows machine.
// GTEST_OS_TARGET_PLATFORM is defined by us when running CMake
#if GTEST_OS_WINDOWS && !GTEST_OS_TARGET_PLATFORM
        *os << reinterpret_cast<const void*>(
          reinterpret_cast<internal::UInt64>(p));
#else
        *os << reinterpret_cast<const void*>(
          static_cast<internal::UInt64>(
            reinterpret_cast<internal::UInt32>(p)));
#endif
票数 1
EN

Stack Overflow用户

发布于 2015-01-22 15:48:24

将整个错误日志复制到一个文件中,并查找" error“标记。你会发现一些相关的东西,如未声明的头文件或对象的转发声明,未定义的引用。这个错误与gtest无关。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8699510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档