我试图通过visual社区实现将dll库验证到我的现有解决方案中的google测试框架。基本上,我有3个文件:源代码构建在单个dll项目中。
FooCmdMgr.cpp
FooCmdMgr.h在其他项目中使用最新的google测试框架的单元测试代码与源代码具有相同的解决方案。
FooCmdMgr_Test.cppFooCmdMgr.h
class FooCmdMgr
{
public:
FooCmdMgr(const FooCmdMgr&) = delete;
FooCmdMgr& operator=(const FooCmdMgr& ) = delete;
bool func_1() {
return true;
}
private:
FooCmdMgr();
~FooCmdMgr();
static FooCmdMgr& Instance ( );
friend FooCmdMgr& GetFooCmdMgr ( );
};
inline FooCmdMgr& GetFooCmdMgr()
{
return FooCmdMgr::Instance();
}FooCmdMgr_Test.cpp
#include "stdafx.h"
#include "../FooCmdMgr.h"
TEST_F(CJobChangeTestFixture, UnitTest2) {
FooCmdMgr& FooCmdMgr = ICmdEx::FooCmdMgr();
//bool bRet = FooCmdMgr.func_1();
//EXPECT_EQ(bRet, true);
}解决方案是复杂的,成功的,但链接器是不好的。它显示了错误LNK2019,如下所示:
Severity Code Description Project File Line Suppression State
Error LNK2019 unresolved external symbol "private: static class ICmdEx::FooCmdMgr & __cdecl ICmdEx::FooCmdMgr::Instance(void)" (?Instance@FooCmdMgr@ICmdEx@@CAAEAV12@XZ) referenced in function "class ICmdEx::FooCmdMgr & __cdecl ICmdEx::GetIKYCmdMgr(void)" (?GetIKYCmdMgr@ICmdEx@@YAAEAVFooCmdMgr@1@XZ) IEditorDll_GTest E:\work\project\UnitTest\FooCmdMgr_Test.obj项目结构
E:\work\project\FooCmdMgr.vcxproj
E:\work\project\FooCmdMgr.cpp
E:\work\project\FooCmdMgr.h
E:\work\project\FooCmdMgr.dll
E:\work\project\FooCmdMgr.libGoogle测试项目
E:\work\project\UnitTest\FooCmdMgr_Test.vcxproj
E:\work\project\UnitTest\FooCmdMgr_Test.cpp我还更改gtest项目通用/附加库目录中链接器的配置
$(ProjectDir)../投入/附加依赖/
FooCmdMgr.lib我在努力弄清楚链接器是怎么回事?请给我建议。
发布于 2021-03-12 02:52:49
你的Foo课应该是这样的
#pragma once
#ifdef PROJECT1_EXPORTS
#define PROJECT1_API __declspec(dllexport)
#else
#define PROJECT1_API __declspec(dllimport)
#endif
class PROJECT1_API Foo
{
};PROJECT1_EXPORTS是在您的主源预处理器项目中定义的。并且它不会在您的测试项目中定义。
发布于 2022-10-18 14:36:24
我也遇到了同样的问题,并通过将输出..obj/..lib文件添加到测试项目的依赖项中来修复它,如下所述:https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2015/test/unit-testing-existing-cpp-applications-with-test-explorer?view=vs-2015&redirectedfrom=MSDN#objectRef
我有Visual 2022和Google,对我来说,只执行从指令到步骤2到4就足够了。即:
在解决方案资源管理器中的
选择“编辑”,并添加.obj或.lib文件的名称。不要使用完整的路径名。

选择编辑,并添加.obj或.lib文件的目录路径。路径通常位于正在测试的项目的构建文件夹中.
我使用NVIDIA,所以需要添加它的.lib文件和路径。
https://stackoverflow.com/questions/66560672
复制相似问题