【问题标题】:Can't get google test to work无法让谷歌测试工作
【发布时间】:2015-10-27 02:04:57
【问题描述】:
#include "gtest/gtest.h"

TEST(BattleUnitTest, CountryReturnsProperName) {
    EXPECT_EQ(1, 1);
}

int main(int argc, char* argv[]) {
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

我似乎无法让谷歌测试工作。我运行 Nuget 包管理器来获取 gtest。它不断给我这些错误:

Severity    Code    Description Project File    Line
Error   LNK2019 unresolved external symbol "bool __cdecl testing::internal::IsTrue(bool)" (?IsTrue@internal@testing@@YA_N_N@Z) referenced in function "public: void __thiscall testing::internal::scoped_ptr<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::reset(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *)" (?reset@?$scoped_ptr@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@internal@testing@@QAEXPAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) Assignment1_Battle  E:\C++\Projects\Assignment1_Battle\Assignment1_Battle\BattleUnitTest.obj    1

.

    Severity    Code    Description Project File    Line
Error   LNK2019 unresolved external symbol "public: __thiscall testing::Message::Message(void)" (??0Message@testing@@QAE@XZ) referenced in function "private: virtual void __thiscall BattleUnitTest_CountryReturnsProperName_Test::TestBody(void)" (?TestBody@BattleUnitTest_CountryReturnsProperName_Test@@EAEXXZ)    Assignment1_Battle  E:\C++\Projects\Assignment1_Battle\Assignment1_Battle\BattleUnitTest.obj    1

.

Severity    Code    Description Project File    Line
Error   LNK2019 unresolved external symbol "class testing::AssertionResult __cdecl testing::internal::EqFailure(char const *,char const *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,bool)" (?EqFailure@internal@testing@@YA?AVAssertionResult@2@PBD0ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@1_N@Z) referenced in function "class testing::AssertionResult __cdecl testing::internal::CmpHelperEQ<int,int>(char const *,char const *,int const &,int const &)" (??$CmpHelperEQ@HH@internal@testing@@YA?AVAssertionResult@1@PBD0ABH1@Z) Assignment1_Battle  E:\C++\Projects\Assignment1_Battle\Assignment1_Battle\BattleUnitTest.obj    1

我可以发布所有错误,但几乎所有错误都与 LNK2019 有关。有谁知道如何解决这些错误?

【问题讨论】:

  • 我记得你必须在链接部分的输入字段中添加两个 *.lib 文件。
  • 您遇到了链接器错误,因此您可能需要在项目中包含gtest 库。您似乎只包含了编译器查找头文件的路径。
  • 如果您发布了在构建过程中如何调用link.exe,它将变得更加清晰。粘贴 .vcxproj 文件中的 &lt;Link&gt; 部分或 VS 如何调用 link.exe 的命令行。

标签: c++ visual-studio-2012 googletest


【解决方案1】:

我遇到了这个问题,但我的链接器设置没有问题。我最终追踪到这篇帖子PrintTo link issue

这确实是由不匹配的 /Zc:wchar_t 设置引起的。我 在上一篇文章中没有提到我做了那个例子 代码为 Qt 控制台应用程序项目(使用 Qt 插件 1.1.9)。 显然,该项目的 wchar_t 设置设置为“否” 模板,而 Google Mock 的项目设置被设置为“是” 默认。当我重新编译 Google Mock 并将设置设置为“否”时 链接器问题消失了。

当我将设置“将 WChar_t 视为内置类型”更改为“是 /Zc:wchar_t”时,构建工作正常。

【讨论】:

    【解决方案2】:

    看起来您需要对测试项目进行一些额外配置:

    1. 将 gtest 库名称添加到您的项目属性(项目属性->配置属性->链接器->输入)。请注意,您可能需要为 Debug 和 Release 配置添加此内容,并且库名称不同(它们是用于发布的 gtest.lib 和用于调试的 gtestd.lib;区别是之前名称末尾的“d”点)。
    2. gtest 库的路径添加到您的项目属性(项目属性->配置属性->VC++ 目录->库目录)。这也需要针对 Debug 和 Release 配置分别进行,因为目录也不同。

    如果出现其他问题,这个article 可能真的很有用。它包含在不使用 Nuget 的情况下在 Visual Studio 中为项目设置 gtest 的完整方案。请注意,Nuget 基本上会将已编译的 gtest 版本设置为您的项目/解决方案的“打包”子目录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多