如何在Visual Studio 2013的C++项目中编译和链接谷歌测试,但使用NuGet Package Manag
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社区版。我想用比下载头文件和二进制文件或自己编译更新的方式为C++安装gtest和gmock。
我找到了"工具">"Nuget软件包管理器">"为解决方案管理Nugets软件包"我选择了在线,然后键入gtest。从搜索结果中,我找到了谷歌测试,所以我为我当前的项目安装了它。安装后,以下代码编译:
#include <iostream>
#include <gtestgtest.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测试::internal::IsTrue(bool)"(?IsTrue@internal@测试@@YA_N_N@Z)在函数"public:void __thiscall"中引用测试::internal::scope_ptr,类std::分配器>>::重置(类std::basic_string,类std::分配器>*)"(?重置@$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\visualstudio 2013\Projects\tmp\tmp\Source.obj tmp
所以我打开了:项目属性>配置属性>链接器>输入我补充道:gtest.lib但不幸的是,我看到了:
错误1错误LNK1104:无法打开文件'gtest.lib'c:\Users\Grzegorz\documents\visual studio2013\Projects\tmp\tmp\LINK tmp
当我添加文件的完整路径时(我知道我不应该),有一些奇怪的错误:
错误2错误LNK2005:"public:__thiscallstd::_Container_base12::_Contaliner_base12(无效)"(??0_Container_base12@std@@QAE@XZ)已在中定义gtestd.lib(gtest-all.obj)c:\Users\Grzegorz\documents\visualstudio
2013\Projects\tmp\tmp\msvcprtd.lib(MSVCP120D.dll)tmp
所以我的问题是如何在Visual Studio 2013的C++项目中编译和链接谷歌测试,但使用NuGet Package Manager安装的Gtest
Google Test NuGet包包含仅用于静态链接的预建库,但数据包链接选项的默认初始值设定项是"动态"。
Project properties
-> Configuration properties
-> Referenced packages
-> gtest
-> Linkage: set to "Static"
并且不要手动添加gtest.lib。
我找到了一个解决方案:当我在nugets包管理器中键入gtest以查找包时,我发现了多个包:
- 谷歌测试
- FIX8 GTest依赖性符号
- FIX8 GTest依赖性
所以我还安装了FIX8 GTest依赖项。链接错误消失了。
- 谷歌测试中的期望值存储在哪里
- 更正 CMakeList.txt 用于谷歌测试的文件?
- 如何让谷歌测试正常运行。测试总是失败。(它不会编译)
- 谷歌测试方法与流
- _mm256_load_ps调试模式下导致谷歌/基准测试的分段错误
- 谷歌测试:模板模板的笛卡尔乘积的类型列表与模板
- C++ 谷歌测试除以零
- 如何使用谷歌基准测试对自定义界面进行基准测试
- 谷歌基准测试,如何只调用一次代码?
- 多定义C ++ / C谷歌测试
- 使用谷歌测试进行测试时出现分段错误
- 如何使用谷歌测试检查两个枚举类元素的相等性?
- 谷歌测试集ArgReferee with vector<unique_ptr>
- 谷歌基准测试结果中显示的时间没有意义
- 如何测试我的谷歌身份验证器实现?
- 谷歌测试编译错误 Os X:函数式转换从"int"到"internal::FloatingEq2Matcher"的模糊转换<float>
- 谷歌测试发现在macOSX上添加并运行了我的所有测试两次
- 在谷歌测试中创建模拟类的向量
- 为什么在谷歌测试中调用"mkdtemp()"时失败
- 多次调用单个测试-谷歌测试