参考:https://blog.csdn.net/chenkai5182/article/details/100710545
dll模块中用static实现的单例类,在链接到另一个模块后,会生成两个实例。
因为实际上dll和需要链接dll的另一个模块上,调用单例类是调用的两个不同的函数(函数逻辑相同,但是代码的位置不同)。
在dll模块中将生成static变量的函数导出,这样在链接时,都是链接的同一个函数。
class Singleton
{
public:
__declspec(export) static Singleton& Instance()
{
sta
class Log { public: __declspec(dllexport) static Log* Instance() //导出 { static Log mLog; return &mLog; } void SetCfg(std::string cfgPath); protected: std::string GetExeName(); bool ReadCfg(const char* cfgPath); private: Log() { _needSaveLog = false; _logName = ""; _logLevel = spdlog::level::critical; } Log(const Log& log) = default; Log& operator = (const Log& log) = default; virtual ~Log() {}; private: std::shared_ptr<spdlog::logger> _logger; spdlog::level::level_enum _logLevel; std::string _logName; bool _needSaveLog; };
}