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++ 记录 QString 时插入的额外空间
是否可以通过与 easylogging++ 相同的方式链接重载插入运算符来创建一个模仿 std::cout 语法的 C++ 类?