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);
}
Czy możesz pokazać nam przykład kodu minimalnego, który odtwarza Twój błąd? – AndyG
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ę. –
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. –