5

私は、SFML をコンテキストおよび入力マネージャーとして使用し、GLSDK を OpenGL (および画像や現在重要ではないもの) の読み込みに使用し、Boost を他のいくつかのものに使用して、OpenGL エンジンを開始しています。

私は「ロギング」のアイデアについて疑問に思っていました.Boost.Log(例のコンパイルに失敗し、問題への唯一の参照は未解決です)、Log4CPP(起動時にエラーが発生しました)を試してみましたが、最終的にすべてがうまくいったようです. easylogging ++で問題ありません.ヘッダーのみのライブラリ(万歳!)であり、いくつかのきちんとした構文IMOがありました。

ただし、コンパイル時に一連のエラーが発生します。

  • C2664: 'el::base::utils::DateTime::gettimeofday' : パラメーター 1 を 'int *' から 'el::base::utils::timeval *' に変換できません

  • C2228: '.tv_usec' の左側には class/struct/union が必要です

  • C2227: '->tv_usec' の左側は class/struct/union/generic 型を指している必要があります
  • C2079: 'currTime' は未定義の構造体 'el::base::utils::timeval' を使用しています
  • C2027: 未定義の型 'el::base::utils::timeval' の使用
  • そしてもう少し

私はこのように実装しました:

  • 'helpers.Log.hpp': プラグマ ワンス。'easylogging++.h' をインクルードし、名前空間ヘルパー > 名前空間ログ > void 関数 init() を定義します。
  • 'helpers.Log.cpp': '_INITIALIZE_EASYLOGGINGPP' であり、次のように init() を実装します。

    el::Configurations conf("../log_config.cfg");
    el::Loggers::reconfigureLogger("default", conf);
    el::Loggers::reconfigureAllLoggers(conf);
    

これで、これら 2 つのファイルだけが logging を処理します。「engine.Core.hpp」には、「helpers.Log.hpp」、「engine.Boot.hpp」(今は空白)、「glload/gl_load.hpp」、「glload/gl_3_3.hpp」が含まれ、エンジン名前空間内のコア クラスで、init() 関数が呼び出されます。

アプリケーション全体で他に何も行われません。それだけで、ログシステムの初期化ですが、完全に失敗します。

システムインフォメーション

OS : Windows7 x64

IDE : ビジュアル スタジオ 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:正確 /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 ++を壊すことができます。もう終わりです。それはどのように可能ですか?私に何ができる?

編集して実際のコードを追加

エンジン.コア.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();
    };
}

エンジン.コア.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);
}
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 に答える