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

baz*_*rek 5 c++ linker googletest visual-studio nuget

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

我找到了Tools> Nuget Package Manager> Manage Nugets Packages for Solution我选择了Online,然后输入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();
}
Run Code Online (Sandbox Code Playgroud)

但它没有链接:

错误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,class std :: allocator>*)"(?reset @?$ scoped_ptr @ V?$ basic_string @ DU?$ char_traits @ D @ std @@ V'$分配器@ d @ @@ 2 STD @@@内部@ @@测试QAEXPAV?$ basic_string的@ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ @@ 2 STD @@@ Z) c:\ Users\Grzegorz\documents\visual studio 2013\Projects\tmp\tmp\Source.obj tmp

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

错误1错误LNK1104:无法打开文件'gtest.lib'c:\ Users\Grzegorz\documents\visual studio 2013\Projects\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?

小智 5

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

Project properties 
-> Configuration properties 
-> Referenced packages 
-> gtest 
-> Linkage: set to "Static"
Run Code Online (Sandbox Code Playgroud)

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


baz*_*rek 4

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

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

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