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 项目中。
要将代码合并到测试项目中,您有两种选择。
- 您也可以将 VM 项目中的 .cpp 文件添加到测试项目中,但通常不会这样做。
- 相反,如果您的 VM 项目现在是 EXE,我建议创建一个名为 VMLib 的新项目作为 LIB 项目,然后将该项目添加到测试项目和 VM EXE 项目。
我在这里找到了解决方案:
与 Steve 的建议类似,除了我没有创建一个全新的项目,我使用 post-build 事件将我的项目构建到一个库中,然后 link google对此进行测试。与 Steve 的解决方案相比,它的优势在于您根本不必修改主项目,您仍然可以在其上构建单元测试项目。
我有一个项目正在尝试添加 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 项目中。
要将代码合并到测试项目中,您有两种选择。
- 您也可以将 VM 项目中的 .cpp 文件添加到测试项目中,但通常不会这样做。
- 相反,如果您的 VM 项目现在是 EXE,我建议创建一个名为 VMLib 的新项目作为 LIB 项目,然后将该项目添加到测试项目和 VM EXE 项目。
我在这里找到了解决方案:
与 Steve 的建议类似,除了我没有创建一个全新的项目,我使用 post-build 事件将我的项目构建到一个库中,然后 link google对此进行测试。与 Steve 的解决方案相比,它的优势在于您根本不必修改主项目,您仍然可以在其上构建单元测试项目。