google 测试未解决的外部问题

Unresolved externals with google test

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

虚拟机(项目)

some source files

BytecodePrograms.h

VMTest (project, made by add project -> google test -> link dynamically, test VM)

pch.h

test.cpp

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

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 class 并使用它并且可以构建 运行 和 BytecodePrograms.h 包括 VM.h其中包含此 class.

的声明

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

有什么想法吗?谢谢。

这是一个 link 错误,表明它找到了 .h 文件,但找不到 .cpp 中的实际实现。如果您有一个 LIB 项目,那么 visual studio 可能会将编译到 LIB 项目中的 cpp 代码添加到您的 EXE 项目中。

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

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

我在这里找到了解决方案:

与 Steve 的建议类似,除了我没有创建一个全新的项目,我使用 post-build 事件将我的项目构建到一个库中,然后 link google对此进行测试。与 Steve 的解决方案相比,它的优势在于您根本不必修改主项目,您仍然可以在其上构建单元测试项目。