GLSDK 打破了easylogging++
Posted
技术标签:
【中文标题】GLSDK 打破了easylogging++【英文标题】:GLSDK breaks easylogging++ 【发布时间】:2013-08-21 22:37:32 【问题描述】:我正在启动一个 OpenGL 引擎,使用 SFML 作为上下文和输入管理器,使用 GLSDK 来加载 OpenGL(以及现在不重要的图像和东西),并使用 Boost 来处理其他一些事情。
我一直在思考“日志记录”的想法,并尝试了 Boost.Log(未能编译示例,并且对问题的唯一引用未解决)、Log4CPP(在启动时出现错误),最后一切似乎很适合easylogging++,它是一个只有头文件的库(太棒了!),它有一些简洁的语法IMO。
但是编译的时候会报一堆错误:
C2664: 'el::base::utils::DateTime::gettimeofday' : 无法将参数 1 从 'int *' 转换为 'el::base::utils::timeval *'
C2228:“.tv_usec”左侧必须有类/结构/联合
C2227:“->tv_usec”左侧必须指向类/结构/联合/通用类型 C2079:“currTime”使用未定义的结构“el::base::utils::timeval” C2027:使用未定义类型 'el::base::utils::timeval' 还有更多我是这样实现的:
'helpers.Log.hpp':pragma once,包括 'easylogging++.h' 并定义命名空间助手 > 命名空间日志 > void function init()。'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)
编译命令: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/include /IF:/dev/BOOST/154 /IF:/DEV/LIBROCKET/121_3/include /Zi /nologo- /W3 /WX- /Od /Ob0 /Oy- /D WIN32 /D _WINDOWS /D _DEBUG / D "CMAKE_INTDIR=\"Debug\"" /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /GR /Fo"KINGDOMS_0_1.dir\Debug\" /Fd "F:/BTSync/prog_projs/KINGDOMS/trunk/pro/Debug/KINGDOMS_0_1_d.pdb" /Gd /TP /analyze- /errorReport:prompt ..\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);
【问题讨论】:
您能给我们展示一个重现您的错误的最小代码示例吗? 完成。这是我现在使用的文字代码。删除“glload/gl_3_3.hpp”的包含可解决编译错误。感谢您的关注。 当然,我还是需要包含glload/gl_3_3.hpp,还有logger接口!所以不能把它作为解决方案。包含任何其他版本的 OpenGL 都会导致 easylogging++ 失败。 好像和跨平台日期时间功能有冲突。您使用的是什么编译器和操作系统?你能发送编译命令吗? 我已在主要问题中添加了信息。感谢您的关注! 【参考方案1】:我通过添加修复它
#include <Winsock2.h>
紧接着:
#elif _ELPP_OS_WINDOWS
# include <direct.h>
# include <Windows.h>
在easylogging++.h中
它包含 timeval 结构的定义。看来他们忘记了。
【讨论】:
是的,这对我不起作用,它只会产生超过 500 个错误。我真的很困惑为什么标题守卫在这里没有做他们的工作,但我真的厌倦了easylogging++的唯一问题,即使它不一定是它的错。以上是关于GLSDK 打破了easylogging++的主要内容,如果未能解决你的问题,请参考以下文章
是否可以通过与 easylogging++ 相同的方式链接重载插入运算符来创建一个模仿 std::cout 语法的 C++ 类?