2013-08-21 27 views
5

Zaczynam silnik OpenGL, używając SFML jako kontekstów i menedżerów wejściowych, GLSDK do ładowania OpenGL (i obrazów i rzeczy nieważnych teraz) i Boost dla kilku innych rzeczy.GLSDK łamie easylogging ++

Zastanawiam się nad tym w "logowaniu" pomysłu i próbowałem Boost.Log (nie udało się skompilować przykładu, a jedynym odnośnikiem do problemu jest nierozwiązany), Log4CPP (który dawał błędy przy starcie) i wreszcie wszystko wydawało się być w porządku dzięki easyloggingowi ++, będąc biblioteką tylko nagłówkową (horray!), która miała jakąś czystą składnię IMO.

ale daje kilka błędów podczas kompilacji:

  • C2664: 'el :: Base :: utils :: DateTime :: gettimeofday': nie można konwertować parametru 1 z 'int *' do ' el :: baza :: utils :: timeval * '

  • C2228: lewej' .tv_usec”musi mieć klasa/struct/Unii

  • C2227: lewej '-> tv_usec' musi wskazywać na klasy/struct/union/generic type
  • C2079: 'currTime' używa un zdefiniowane struct 'el :: baza :: utils :: timeval'
  • C2027: użycie nieokreślonego typu 'el :: baza :: utils :: timeval'
  • a niektóre bardziej

I wprowadziły to w ten sposób:

  • 'helpers.Log.hpp': pragma raz, obejmuje 'easylogging ++ h' i definiuje pomocników przestrzeni nazw namespace> log> void function init().
  • 'helpers.Log.cpp': '_INITIALIZE_EASYLOGGINGPP' i wdraża init() jak następuje:

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

Teraz tylko te dwa pliki do czynienia z logowaniem. "engine.Core.hpp" zawiera "helpers.Log.hpp", "engine.Boot.hpp" (puste już teraz), "glload/gl_load.hpp", "glload/gl_3_3.hpp" oraz w konstruktorze Klasa rdzenia, wewnątrz przestrzeni nazw silnika, wywoływana jest funkcja init().

Nic innego nie jest zrobione w całej aplikacji. Właśnie to, inicjalizacja systemu logowania, ale nie udaje się całkowicie.

SYSTEM INFORMACYJNY

OS: Windows 7 x64

IDE: Visual Studio 2012

COMPILER: VS2012 (V110)

COMPILE POLECENIE: 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 = \" Debugowanie \ ""/D _MBCS/Gm-/EHsc/RTC1/MDd/GS/fp: exact/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/analyser-/errorReport: prompt .. \ src \ engine.Boot.cpp .. \ src \ engine.Core.cpp .. \ src \ engine.Interfaces.cpp .. \ src \ helpers.Log.cpp .. \ src \ main.cpp

EDIT przed publikacją: Ok, więc wygląda na to 'glload/gl_3_3.hpp' jest tu problemem. Udaje mu się złamać easylogging ++. To już nade mną. Jak to jest w ogóle możliwe? Co mogę zrobić?

EDIT DO ADD prawdziwy kod

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

Czy możesz pokazać nam przykład kodu minimalnego, który odtwarza Twój błąd? – AndyG

+0

Gotowe. To jest dosłowny kod, którego używam teraz. Usunięcie elementu "glload/gl_3_3.hpp" rozwiązuje błędy kompilacji. Dziękuję za uwagę. –

+0

Oczywiście nadal muszę dołączyć glload/gl_3_3.hpp i interfejs rejestratora! Więc nie można go zostawić jako rozwiązania.Włączenie każdej innej wersji OpenGL powoduje, że easylogging ++ nie działa. –

Odpowiedz

2

Naprawiłem go dodając

#include <Winsock2.h> 

tuż po:

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

w easylogging ++. H

Zawiera ona definicję struct timeval. Wygląda na to, że o tym zapomnieli.

+0

Tak, to nie działa dla mnie, tworzy tylko ponad 500 błędów. Naprawdę zastanawia mnie, dlaczego strażnicy nie robią tutaj swojej pracy, ale naprawdę mam już dość tego jedynego problemu z easylogging ++, nawet jeśli niekoniecznie jest to jego wina. – Thomas

Powiązane problemy