首页 > 解决方案 > 我的游戏引擎的 spdlog 日志记录出现奇怪的“未解析的外部符号”错误

问题描述

我正在尝试使用 spdlog 为我目前正在学习如何构建的游戏引擎进行日志记录,但我遇到了这些奇怪的错误。

“未解析的外部符号“私有:静态类 std::shared_ptr Hazel::Log::s_CoreLogger”(?s_CoreLogger@Log@Hazel@@0V?$shared_ptr@Vlogger@spdlog@@@std@@A)"

“未解析的外部符号“私有:静态类 std::shared_ptr Hazel::Log::s_ClientLogger”(?s_ClientLogger@Log@Hazel@@0V?$shared_ptr@Vlogger@spdlog@@@std@@A)"

这是我的代码(Log.h):

#pragma once

#include <memory>
#include "Core.h"
#include "spdlog/spdlog.h"

namespace Hazel {
    class HAZEL_API Log
    {
    public:
        static void Init();

        inline static std::shared_ptr<spdlog::logger>& GetCoreLogger() { return s_CoreLogger; }
        inline static std::shared_ptr<spdlog::logger>& GetClientLogger() { return s_ClientLogger; }
    private:
        static std::shared_ptr<spdlog::logger> s_CoreLogger;
        static std::shared_ptr<spdlog::logger> s_ClientLogger;
    };
}

我不知道这是否需要/相关,但这是我在 cpp 文件(Log.cpp)中的代码:

#include "Log.h"

namespace Hazel {

    std::shared_ptr<spdlog::logger> s_CoreLogger;
    std::shared_ptr<spdlog::logger> s_ClientLogger;

    void Log::Init()
    {
        spdlog::set_pattern("%^[%T] %n: %v%$");
    }

}

标签: c++

解决方案


#include "Log.h"

namespace Hazel {

    // declare these as part of Log!
    std::shared_ptr<spdlog::logger> Log::s_CoreLogger;
    std::shared_ptr<spdlog::logger> Log::s_ClientLogger;

    void Log::Init()
    {
        spdlog::set_pattern("%^[%T] %n: %v%$");
    }

}

推荐阅读