【问题标题】:How to compile and link google tests in C++ project in Visual Studio 2013 but with Gtest installed by NuGet Package Manager?如何在 Visual Studio 2013 的 C++ 项目中编译和链接谷歌测试,但使用 NuGet 包管理器安装的 Gtest?
【发布时间】:2015-05-07 08:18:25
【问题描述】:

我在 Windows 7 上安装了 Microsoft Visual Studio 2013 社区版。 我想以比下载头文件和二进制文件或自己编译更新的方式为 C++ 安装 gtest 和 gmock。

我找到了工具 > Nuget 包管理器 > 管理 Nuget 包以获取解决方案 我选择了在线,然后输入了 gtest。从搜索结果中我找到了 Google Test,所以我为我当前的项目安装了它。 安装后编译如下代码:

#include <iostream>
#include <gtest\gtest.h>

using namespace std;
using namespace ::testing;

int factorian(int n)
{
    if (n == 0 || n == 1)
        return 1;
    else
        return n*factorian(n - 1);
}

TEST(factorianTest, simpleTest)
{
    ASSERT_EQ(1, factorian(0));
    ASSERT_EQ(1, factorian(1));
    ASSERT_EQ(2, factorian(2));
}

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

但它没有链接:

错误 1 ​​错误 LNK2019:无法解析的外部符号“bool __cdecl testing::internal::IsTrue(bool)" (?IsTrue@internal@testing@@YA_N_N@Z) 在函数“public: void __thiscall”中引用 testing::internal::scoped_ptr,class std::allocator > >::reset(class std::basic_string,类 std::allocator > *)" (?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) c:\Users\Grzegorz\documents\visual 工作室 2013\Projects\tmp\tmp\Source.obj tmp

所以我打开了:项目属性>配置属性>链接器>输入 我补充说: gtest.lib 但不幸的是我看到了:

错误 1 ​​错误 LNK1104:无法打开文件 'gtest.lib' c:\Users\Grzegorz\documents\visual studio 2013\项目\tmp\tmp\LINK tmp

当我添加文件的完整路径时(我知道我不应该)出现奇怪的错误:

错误 2 错误 LNK2005: "public: __thiscall std::_Container_base12::_Container_base12(void)" (??0_Container_base12@std@@QAE@XZ) 已经定义在 gtestd.lib(gtest-all.obj) c:\Users\Grzegorz\documents\visual studio

2013\Projects\tmp\tmp\msvcprtd.lib(MSVCP120D.dll) tmp

所以我的问题是如何在 Visual Studio 2013 的 C++ 项目中编译和链接谷歌测试,但使用 NuGet 包管理器安装 Gtest?

【问题讨论】:

  • 嘿 Grzegorz,我遇到了类似的问题,但不幸的是,Fix8 解决方案对我不起作用。你能看看我在这个链接中的设置,看看你能不能看到什么? stackoverflow.com/questions/40811621/…

标签: c++ visual-studio linker nuget googletest


【解决方案1】:

Google Test NuGet 包仅包含用于静态链接的预构建库,但包的链接选项的默认初始化程序是“动态的”。

Project properties 
-> Configuration properties 
-> Referenced packages 
-> gtest 
-> Linkage: set to "Static"

并且不要手动添加 gtest.lib。

【讨论】:

    【解决方案2】:

    我找到了解决方案: 当我在 nugets 包管理器中输入 gtest 以查找包时,我发现了多个包:

    1. 谷歌测试
    2. FIX8 GTest 依赖符号
    3. FIX8 GTest 依赖项

    所以我还安装了 FIX8 GTest 依赖项。并且链接错误消失了。

    【讨论】:

    • 谢谢!这是我在大量搜索后发现的唯一解决问题的答案。
    • FIX8? FIX8 与什么有什么关系?我不愿意从不相关的项目中安装包。
    • 它不是无关的(由google维护),FIX8通常也意味着64位预建btw。
    猜你喜欢
    • 2017-08-06
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多