未解决的外部与谷歌测试

时间:2018-08-28 02:40:33

标签: c++ googletest

我有一个项目正在尝试向其中添加google-test单元测试。它的结构如下:

VM(项目)

some source files

BytecodePrograms.h

VMTest (项目,通过添加项目->谷歌测试->动态链接,测试VM

pch.h

test.cpp

我在VM属性中添加了我的VMTest项目作为包含目录-> c / c ++->常规->其他包含目录

{p {1}}的

内容是:

test.cpp

如果我构建,会出现以下错误

#include "pch.h"
#include "BytecodePrograms.h"

TEST(TestCaseName, TestName) {
  EXPECT_EQ(8, VMFibonacciImp(6));
  EXPECT_TRUE(true);
}

但是,我的Error LNK2019 unresolved external symbol "public: __thiscall WVM::WVM(void)" (??0WVM@@QAE@XZ) referenced in function "int __cdecl VMFibonacciImp(int)" (?VMFibonacciImp@@YAHH@Z) WVMTest C:\Users\WadeMcCall\source\repos\Virtual Machine Visual Scripting\WVMTest\test.obj 1 Error LNK2019 unresolved external symbol "public: __thiscall WVM::~WVM(void)" (??1WVM@@QAE@XZ) referenced in function "int __cdecl VMFibonacciImp(int)" (?VMFibonacciImp@@YAHH@Z) WVMTest C:\Users\WadeMcCall\source\repos\Virtual Machine Visual Scripting\WVMTest\test.obj 1 Error LNK2019 unresolved external symbol "public: int __thiscall WVM::interpret(class std::vector<int,class std::allocator<int> >)" (?interpret@WVM@@QAEHV?$vector@HV?$allocator@H@std@@@std@@@Z) referenced in function "int __cdecl VMFibonacciImp(int)" (?VMFibonacciImp@@YAHH@Z) WVMTest C:\Users\WadeMcCall\source\repos\Virtual Machine Visual Scripting\WVMTest\test.obj 1 项目定义了VM类并使用它并且可以构建和运行它,并且WVM包含BytecodePrograms.h,该类具有该类的声明。

我觉得这一定是我在Visual Studio中设置项目的问题,但是我不知道。我已经连续搜寻了2天,发现其他人也有类似的问题,但是他们的解决方案似乎对我没有用。

有什么想法吗?谢谢。

2 个答案:

答案 0 :(得分:0)

这是一个链接错误,表明它找到了.h文件,但找不到在.cpp中找到的实际实现。如果您有一个LIB项目,则Visual Studio可能会将cpp代码编译到LIB项目中,并将其添加到您的EXE项目中。

要将代码合并到测试项目中,您有两个选择。

  1. 您也可以将VM项目中的.cpp文件添加到Test项目中,但是通常不会这样做。
  2. 相反,如果您的VM项目现在是EXE,则建议创建一个名为VMLib的新项目作为LIB项目,然后将该项目添加到测试项目和VM EXE项目中。

答案 1 :(得分:0)

我在这里找到了解决方案:https://stackoverflow.com/a/19709712/8488701

类似于史蒂夫的建议,除了创建一个新项目之外,我使用构建后事件将我的项目构建到一个库中,然后将google test链接到该库。与Steve解决方案相比,此方法的优势在于您根本不需要修改主项目,并且仍然可以在其之上构建单元测试项目。