2013-08-21 32 views
5

我啓動了一個OpenGL引擎,使用SFML作爲上下文和輸入管理器,GLSDK用於加載OpenGL(以及圖像和事情現在不重要)以及Boost for some other things。我一直在想'圍繞'日誌'的想法,並試圖Boost.Log(未能編譯一個例子,並且對問題的唯一引用未解決),Log4CPP(在啓動時給出了錯誤),最後easylogging ++的一切似乎都沒問題,它只是一個頭文件庫(horray!),它有一些整齊的語法IMO。GLSDK打破easylogging ++

但在編譯時,它提供一堆錯誤:

  • C2664: '厄爾尼諾::基地:: utils的日期時間:: :: gettimeofday的':無法從 '詮釋*' 到'轉換參數1埃爾::基地:: utils的::的timeval * '

  • C2228:左' .tv_usec」必須有類/結構/聯合

  • C2227:左 ' - > tv_usec' 必須指向類/ struct/union/generic type
  • C2079:'currTime'使用un定義結構 'EL ::基:: utils的::的timeval'
  • C2027:使用未定義類型的 'EL ::基:: utils的::的timeval'
  • 和一些更

我已經實現它是這樣的:

  • 'helpers.Log.hpp':編譯一次,包括'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'包含'helper.Log.hpp','engine.Boot.hpp'(現在爲空),'glload/gl_load.hpp','glload/gl_3_3.hpp'以及構造函數核心類,在引擎名稱空間內調用init()函數。

在整個應用程序中沒有其他任何操作。這就是日誌系統的初始化,但它完全失敗。

系統信息

OS:Windows 7的64位

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:精確/ 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); 
} 
+0

你能告訴我們一個能夠重現錯誤的最小代碼示例嗎? – AndyG

+0

完成。這是我現在使用的文字代碼。刪除包含'glload/gl_3_3.hpp'解決了編譯錯誤。感謝您的關注。 –

+0

當然,我仍然需要包含glload/gl_3_3.hpp和記錄器界面!所以它不能作爲解決方案。包括任何其他版本的OpenGL使easylogging ++失敗。 –

回答

2

我固定它通過剛過加入

#include <Winsock2.h> 

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

在easylogging ++的.h

它包含的timeval結構的定義。看起來他們忘了它。

+0

是的,這不適合我,它只會創造500多個錯誤。我真的很困惑,爲什麼這些頭衛隊沒有在這裏做他們的工作,但我真的厭倦了這個問題,即使它不一定是它的錯。 – Thomas