This question already has answers here:
What is an undefined reference/unresolved external symbol error and how do I fix it?
                                
                                    (32个答案)
                                
                        
                                2个月前关闭。
            
                    
我正在尝试使用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%$");
    }

}

关于c++ - 我的游戏引擎的spdlog日志记录出现奇怪的“无法解析的外部符号”错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58479659/

10-15 12:10