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

时间:2018-08-29 09:06:47

标签: c++ logging visual-studio-2015 easylogging++

我的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

1 个答案:

答案 0 :(得分:4)

似乎宏 dotnet bin\release\netcoreapp2.1\publish\myapp.dll 定义了一个变量。如果您将头文件包含在多个translation units中,则会破坏the one definition rule并出现错误。

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