5

我正在启动一个 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);
    

现在,只有这两个文件处理 logging。“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++。那是我的事。这怎么可能呢?我能做些什么?

编辑以添加真实代码

引擎.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();
    };
}

引擎.Core.cpp

#include <engine.Core.hpp>

engine::Core::Core()
{
    helpers::log::init();
}

engine::Core::~Core()
{
}

助手.Log.hpp

#pragma once

#include <easylogging++.h>

namespace helpers
{
    namespace log
    {
        void init();
    }
}

助手.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);
}
4

1 回答 1

2

我通过添加来修复它

#include <Winsock2.h>

刚过:

#elif _ELPP_OS_WINDOWS
#   include <direct.h>
#   include <Windows.h>

在easylogging++.h中

它包含 timeval 结构的定义。看来他们忘记了。

于 2013-11-12T18:32:06.260 回答