繁体   English   中英

谷歌测试未解决的外部问题

[英]Unresolved externals with google test

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

虚拟机(项目)

some source files

BytecodePrograms.h

VMTest (项目,通过添加项目 -> 谷歌测试 -> 动态链接,测试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类并使用它,并且可以构建和运行, BytecodePrograms.h包括VM.h ,它具有此类的声明。

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

有任何想法吗? 谢谢。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM