如何在 Visual Studio 2013 年的 C++ 项目中编译和 link google 测试,但使用 NuGet 包管理器安装 Gtest?
How to compile and link google tests in C++ project in Visual Studio 2013 but with Gtest installed by NuGet Package Manager?
我在 Windows 7 上安装了 Microsoft Visual Studio 2013 Community Edition。
我想以比下载头文件和二进制文件或自己编译更新的方式为 C++ 安装 gtest 和 gmock。
我找到工具 > Nuget 包管理器 > 管理解决方案的 Nugets 包
我选择在线,然后输入 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();
}
但它没有 link:
Error 1 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::allocator > >::reset(class
std::basic_string,class
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
studio 2013\Projects\tmp\tmp\Source.obj tmp
所以我打开了:项目属性>配置属性>链接器>输入
我补充说:
gtest.lib
但不幸的是我看到了:
Error 1 error LNK1104: cannot open file
'gtest.lib' c:\Users\Grzegorz\documents\visual studio
2013\Projects\tmp\tmp\LINK tmp
当我添加文件的完整路径时(我知道我不应该这样做)出现奇怪的错误:
Error 2 error LNK2005: "public: __thiscall
std::_Container_base12::_Container_base12(void)"
(??0_Container_base12@std@@QAE@XZ) already defined in
gtestd.lib(gtest-all.obj) c:\Users\Grzegorz\documents\visual studio
2013\Projects\tmp\tmp\msvcprtd.lib(MSVCP120D.dll) tmp
所以我的问题是 如何在 Visual Studio 2013 年的 C++ 项目中编译和 link google 测试,但 Gtest 由 NuGet 包管理器安装?
我找到了解决办法:
当我在 nugets 包管理器中键入 gtest 以查找包时,我发现了多个包:
- Google 测试
- FIX8 GTest 依赖符号
- FIX8 GTest 依赖项
所以我也安装了 FIX8 GTest 依赖项。并且链接错误消失了。
Google 测试 NuGet 包包含仅用于静态链接的预构建库,但数据包链接选项的默认初始化程序是 "dynamic".
Project properties
-> Configuration properties
-> Referenced packages
-> gtest
-> Linkage: set to "Static"
并且不要手动添加 gtest.lib。
我在 Windows 7 上安装了 Microsoft Visual Studio 2013 Community Edition。 我想以比下载头文件和二进制文件或自己编译更新的方式为 C++ 安装 gtest 和 gmock。
我找到工具 > Nuget 包管理器 > 管理解决方案的 Nugets 包 我选择在线,然后输入 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();
}
但它没有 link:
Error 1 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::allocator > >::reset(class std::basic_string,class 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 studio 2013\Projects\tmp\tmp\Source.obj tmp
所以我打开了:项目属性>配置属性>链接器>输入 我补充说: gtest.lib 但不幸的是我看到了:
Error 1 error LNK1104: cannot open file 'gtest.lib' c:\Users\Grzegorz\documents\visual studio 2013\Projects\tmp\tmp\LINK tmp
当我添加文件的完整路径时(我知道我不应该这样做)出现奇怪的错误:
Error 2 error LNK2005: "public: __thiscall std::_Container_base12::_Container_base12(void)" (??0_Container_base12@std@@QAE@XZ) already defined in gtestd.lib(gtest-all.obj) c:\Users\Grzegorz\documents\visual studio
2013\Projects\tmp\tmp\msvcprtd.lib(MSVCP120D.dll) tmp
所以我的问题是 如何在 Visual Studio 2013 年的 C++ 项目中编译和 link google 测试,但 Gtest 由 NuGet 包管理器安装?
我找到了解决办法: 当我在 nugets 包管理器中键入 gtest 以查找包时,我发现了多个包:
- Google 测试
- FIX8 GTest 依赖符号
- FIX8 GTest 依赖项
所以我也安装了 FIX8 GTest 依赖项。并且链接错误消失了。
Google 测试 NuGet 包包含仅用于静态链接的预构建库,但数据包链接选项的默认初始化程序是 "dynamic".
Project properties
-> Configuration properties
-> Referenced packages
-> gtest
-> Linkage: set to "Static"
并且不要手动添加 gtest.lib。