c++ - 我的游戏引擎的 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%$");
}
}
解决方案
#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%$");
}
}