首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用google测试框架的未解决外部符号

使用google测试框架的未解决外部符号
EN

Stack Overflow用户
提问于 2021-03-10 08:08:02
回答 2查看 496关注 0票数 1

我试图通过visual社区实现将dll库验证到我的现有解决方案中的google测试框架。基本上,我有3个文件:源代码构建在单个dll项目中。

代码语言:javascript
复制
FooCmdMgr.cpp
FooCmdMgr.h

在其他项目中使用最新的google测试框架的单元测试代码与源代码具有相同的解决方案。

代码语言:javascript
复制
FooCmdMgr_Test.cpp

FooCmdMgr.h

代码语言:javascript
复制
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

代码语言:javascript
复制
#include "stdafx.h"
#include "../FooCmdMgr.h"

 
    TEST_F(CJobChangeTestFixture, UnitTest2) {

        FooCmdMgr& FooCmdMgr = ICmdEx::FooCmdMgr();
        //bool bRet = FooCmdMgr.func_1();
        //EXPECT_EQ(bRet, true);
    }

解决方案是复杂的,成功的,但链接器是不好的。它显示了错误LNK2019,如下所示:

代码语言:javascript
复制
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

项目结构

代码语言:javascript
复制
E:\work\project\FooCmdMgr.vcxproj
E:\work\project\FooCmdMgr.cpp
E:\work\project\FooCmdMgr.h
E:\work\project\FooCmdMgr.dll
E:\work\project\FooCmdMgr.lib

Google测试项目

代码语言:javascript
复制
E:\work\project\UnitTest\FooCmdMgr_Test.vcxproj
E:\work\project\UnitTest\FooCmdMgr_Test.cpp

我还更改gtest项目通用/附加库目录中链接器的配置

代码语言:javascript
复制
$(ProjectDir)../

投入/附加依赖/

代码语言:javascript
复制
FooCmdMgr.lib

我在努力弄清楚链接器是怎么回事?请给我建议。

EN

Stack Overflow用户

发布于 2021-03-12 02:52:49

你的Foo课应该是这样的

代码语言:javascript
复制
    #pragma once
#ifdef PROJECT1_EXPORTS
#define PROJECT1_API __declspec(dllexport)
#else
#define PROJECT1_API __declspec(dllimport)
#endif

class PROJECT1_API Foo
{
};

PROJECT1_EXPORTS是在您的主源预处理器项目中定义的。并且它不会在您的测试项目中定义。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66560672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档