我正在启动一个OpenGL引擎,使用SFML作为上下文和输入管理器,使用GLSDK加载OpenGL(以及图像和现在不重要的东西)和Boost用于其他一些事情。
我一直在想'围绕'日志记录'的想法,并尝试了Boost.Log(无法编译示例,并且唯一没有解决问题的参考),Log4CPP(在启动时出错)以及最后一切似乎很好用easylogging ++,是一个只有标题的库(horray!),它有一些巧妙的语法IMO。
但是在编译时会出现一堆错误:
C2664:'el :: base :: utils :: DateTime :: gettimeofday':无法将参数1从'int *'转换为'el :: base :: utils :: timeval *'
C2228:'。tv_usec'左边必须有class / struct / union
我已经用这种方式实现了它:
'helpers.Log.cpp':'_ INITIALIZE_EASYLOGGINGPP'并实现init(),如下所示:
el::Configurations conf("../log_config.cfg");
el::Loggers::reconfigureLogger("default", conf);
el::Loggers::reconfigureAllLoggers(conf);
现在,只有这两个文件处理日志记录。 'engine.Core.hpp'包括'helpers.Log.hpp','engine.Boot.hpp'(现在为空白),'glload / gl_load.hpp','glload / gl_3_3.hpp'和构造函数中的'核心类,在引擎名称空间内,调用init()函数。
整个应用程序中没有其他任何操作。就是这样,日志系统的初始化,但它完全失败了。
系统信息
操作系统:Windows 7 x64
IDE :Visual Studio 2012
编译: VS2012(v110)
COMPILE COMMAND :cl / c / IF:/ BTSync / prog_projs / KINGDOMS / trunk / inc / IF:/ dev / SFML / 21 / include / IF:/ dev / GLSDK / 052 / glload / include / IF:/ dev / GLSDK / 052 / glutil / include / IF:/ dev / GLSDK / 052 / glm / IF:/ dev / GLSDK / 052 / glmesh / include / IF:/ dev / GLSDK / 052 / glimage /包括/ IF是:/ dev / BOOST / 154 / IF:/ DEV / LIBROCKET / 121_3 /包含/紫/ nologo- / W3 / WX-/ OD / OB0 / Oy- / d WIN32 / d _WINDOWS / d _DEBUG / d “CMAKE_INTDIR = \” 调试\ “”/ d _MBCS / GM-/ EHSC / RTC1 / MDD / GS / FP:精确/ ZC:wchar_t的/ ZC:forScope / GR / FO “KINGDOMS_0_1.dir \调试\”/的Fd “F:/BTSync/prog_projs/KINGDOMS/trunk/pro/Debug/KINGDOMS_0_1_d.pdb”/ GD / TP / analyze- / errorReport:提示.. \ SRC \ engine.Boot.cpp .. \ SRC \ engine.Core。 cpp .. \ src \ engine.Interfaces.cpp .. \ src \ helpers.Log.cpp .. \ src \ main.cpp
出版前编辑:好的,所以看起来'glload / gl_3_3.hpp'就是问题所在。它设法打破easylogging ++。那是在我身上。这怎么可能呢?我该怎么办?
编辑添加真实代码
的 engine.Core.hpp 的
#pragma once
#include <glload/gl_load.hpp>
#include <glload/gl_4_4.hpp>
#include <helpers.Log.hpp>
namespace engine
{
class Core
{
public:
Core();
~Core();
};
}
的 engine.Core.cpp 的
#include <engine.Core.hpp>
engine::Core::Core()
{
helpers::log::init();
}
engine::Core::~Core()
{
}
的 helpers.Log.hpp 的
#pragma once
#include <easylogging++.h>
namespace helpers
{
namespace log
{
void init();
}
}
的 helpers.Log.cpp 的
#include <helpers.Log.hpp>
_INITIALIZE_EASYLOGGINGPP
void helpers::log::init()
{
el::Configurations conf("../log_config.cfg");
el::Loggers::reconfigureLogger("default", conf);
el::Loggers::reconfigureAllLoggers(conf);
}
答案 0 :(得分:2)
我通过添加
修复了它#include <Winsock2.h>
紧随其后:
#elif _ELPP_OS_WINDOWS
# include <direct.h>
# include <Windows.h>
在easylogging ++。h
它包含timeval结构的定义。看起来他们忘了它。