easylogging++ 如何避免多次初始化

Posted

技术标签:

【中文标题】easylogging++ 如何避免多次初始化【英文标题】:easylogging++ how avoid multiple init 【发布时间】:2018-08-29 09:06:47 【问题描述】:

我的 dll 有 2 个入口点,我希望将 EasyLogging++ 与这两个入口一起使用..

我尝试使用此标头:

#pragma once
#ifndef EASYLOGGING_LOADER_H
#define EASYLOGGING_LOADER_H

#include "easylogging++.h"

INITIALIZE_EASYLOGGINGPP

#endif

但包含此文件后,我会收到如下错误:

Error   LNK2005 "class std::shared_ptr<class el::base::Storage> el::base::elStorage" (?elStorage@base@el@@3V?$shared_ptr@VStorage@base@el@@@std@@A) already defined in gInput.obj

关于解决这个问题的任何想法?谢谢

ps。我正在使用Easylogging++ v9.96.4

【问题讨论】:

他听从了我的建议(45 分钟前) 【参考方案1】:

看来宏INITIALIZE_EASYLOGGINGPP 定义了一个变量。如果你在多个translation units 中包含头文件,那么你会破坏the one definition rule 并会得到一个错误。

简单的解决方案是在整个项目中仅调用宏一次,方法是在单个源文件中执行。

【讨论】:

感谢@some!但我该怎么做呢?无法检查宏定义? @ghiboz 你现在做的完全一样,但是在一个源文件中。然后删除您在问题中显示的头文件,它不需要。

以上是关于easylogging++ 如何避免多次初始化的主要内容,如果未能解决你的问题,请参考以下文章

任何使用easylogging++的经验

easylogging++:在应用程序启动时清除日志文件

easylogging++学习记录:流式日志

GLSDK 打破了easylogging++

使用 easylogging++ 记录 QString 时插入的额外空间

是否可以通过与 easylogging++ 相同的方式链接重载插入运算符来创建一个模仿 std::cout 语法的 C++ 类?