Mała pomoc dla mnie, kompilacja

Dwie rzeczy:

  1. nie polecam boosta 1.44 do Visuala 10.0 - trzeba ustawiać dodatkowe makra, żeby się skompilowało. Nie ma ich w repo, bo to dotyczy tylko tej jednej specyficznej kombinacji - inne wersje boosta działają z Visualem, a pod gcc w ogóle nie ma takich problemów.
  2. te błędy są przez to, że w projekcie liba brakuje pewnych plików. Sprawdź, czy na pewno masz wszystkie z trunk/lib (i chyba jeszcze jakiś z głównego folderu, ale nie pamiętam który - jakby dalej nie działało to wklej błąd i ci napiszę co zrobić). Tak an oko to brakuje CArtHandler.cpp i BattleState.cpp, prawdopodobnie jeszcze CThreadHelper.cpp z głównego folderu.

Faktycznie, brakowało kilku plików. Po ich dodaniu ‘VCMI_lib’ skompilowało się poprawnie. Po podawaniu plików brakujących plików z ‘genius’ i ‘StupidAI’ też dało się skompilować. 'VCMI_client" wciąż ma błędy, choć część udało mi się usunąć. Log dla client

1>------ Build started: Project: VCMI_client, Configuration: Debug Win32 ------
1>Build started 2011-03-10 16:37:15.
1>InitializeBuildStatus:
1>  Creating "Debug_VC9\VCMI_client.unsuccessfulbuild" because "AlwaysCreate" was specified.
1>ClCompile:
1>  CHeroHandler.cpp
1>  CObjectHandler.cpp
1>  stdafx.cpp
1>  AdventureMapButton.cpp
1>  CAdvmapInterface.cpp
1>e:\vcmi\trunk\lib\cobjecthandler.cpp(724): warning C4355: 'this' : used in base member initializer list
1>e:\vcmi\trunk\lib\cobjecthandler.cpp(1933): warning C4355: 'this' : used in base member initializer list
1>e:\vcmi\trunk\lib\cobjecthandler.cpp(1933): warning C4355: 'this' : used in base member initializer list
1>  CAnimation.cpp
1>e:\vcmi\trunk\lib\cobjecthandler.cpp(6321): warning C4355: 'this' : used in base member initializer list
1>e:\vcmi\trunk\lib\cobjecthandler.cpp(6872): warning C4355: 'this' : used in base member initializer list
1>  CBattleInterface.cpp
1>e:\programy\visual studio ultimate\vc\include\boost\utility\addressof.hpp(38): warning C4506: no definition for inline function 'void ColorPutter<bpp,incrementPtr>::PutColor(Uint8 *&,const SDL_Color &)'
1>          with
1>          
1>              bpp=2,
1>              incrementPtr=1
1>          ]
1>e:\programy\visual studio ultimate\vc\include\boost\utility\addressof.hpp(38): warning C4506: no definition for inline function 'void ColorPutter<bpp,incrementPtr>::PutColorAlpha(Uint8 *&,const SDL_Color &)'
1>          with
1>          
1>              bpp=2,
1>              incrementPtr=1
1>          ]
1>e:\programy\visual studio ultimate\vc\include\boost\utility\addressof.hpp(38): warning C4506: no definition for inline function 'void ColorPutter<bpp,incrementPtr>::PutColorRow(Uint8 *&,const SDL_Color &,size_t)'
1>          with
1>          
1>              bpp=2,
1>              incrementPtr=1
1>          ]
1>e:\programy\visual studio ultimate\vc\include\boost\utility\addressof.hpp(38): warning C4506: no definition for inline function 'void ColorPutter<bpp,incrementPtr>::PutColor(Uint8 *&,const SDL_Color &)'
1>          with
1>          
1>              bpp=3,
1>              incrementPtr=1
1>          ]
1>e:\programy\visual studio ultimate\vc\include\boost\utility\addressof.hpp(38): warning C4506: no definition for inline function 'void ColorPutter<bpp,incrementPtr>::PutColorAlpha(Uint8 *&,const SDL_Color &)'
1>          with
1>          
1>              bpp=3,
1>              incrementPtr=1
1>          ]
1>e:\programy\visual studio ultimate\vc\include\boost\utility\addressof.hpp(38): warning C4506: no definition for inline function 'void ColorPutter<bpp,incrementPtr>::PutColorRow(Uint8 *&,const SDL_Color &,size_t)'
1>          with
1>          
1>              bpp=3,
1>              incrementPtr=1
1>          ]
1>e:\programy\visual studio ultimate\vc\include\boost\utility\addressof.hpp(38): warning C4506: no definition for inline function 'void ColorPutter<bpp,incrementPtr>::PutColor(Uint8 *&,const SDL_Color &)'
1>          with
1>          
1>              bpp=4,
1>              incrementPtr=1
1>          ]
1>e:\programy\visual studio ultimate\vc\include\boost\utility\addressof.hpp(38): warning C4506: no definition for inline function 'void ColorPutter<bpp,incrementPtr>::PutColorAlpha(Uint8 *&,const SDL_Color &)'
1>          with
1>          
1>              bpp=4,
1>              incrementPtr=1
1>          ]
1>e:\programy\visual studio ultimate\vc\include\boost\utility\addressof.hpp(38): warning C4506: no definition for inline function 'void ColorPutter<bpp,incrementPtr>::PutColorRow(Uint8 *&,const SDL_Color &,size_t)'
1>          with
1>          
1>              bpp=4,
1>              incrementPtr=1
1>          ]
1>  CBitmapHandler.cpp
1>  CCallback.cpp
1>  CCastleInterface.cpp
1>  CConfigHandler.cpp
1>e:\vcmi\trunk\client\ccastleinterface.cpp(365): warning C4355: 'this' : used in base member initializer list
1>e:\vcmi\trunk\client\ccastleinterface.cpp(365): warning C4355: 'this' : used in base member initializer list
1>e:\vcmi\trunk\client\ccastleinterface.cpp(1986): warning C4305: 'argument' : truncation from 'int' to 'bool'
1>  CCreatureAnimation.cpp
1>  CCreatureWindow.cpp
1>e:\programy\visual studio ultimate\vc\include\utility(142): warning C4506: no definition for inline function 'void ColorPutter<bpp,incrementPtr>::PutColor(Uint8 *&,const Uint8 &,const Uint8 &,const Uint8 &,const Uint8 &)'
1>          with
1>          
1>              bpp=3,
1>              incrementPtr=0
1>          ]
1>e:\programy\visual studio ultimate\vc\include\utility(142): warning C4506: no definition for inline function 'void ColorPutter<bpp,incrementPtr>::PutColor(Uint8 *&,const Uint8 &,const Uint8 &,const Uint8 &)'
1>          with
1>          
1>              bpp=3,
1>              incrementPtr=0
1>          ]
1>e:\programy\visual studio ultimate\vc\include\utility(142): warning C4506: no definition for inline function 'void ColorPutter<bpp,incrementPtr>::PutColor(Uint8 *&,const Uint8 &,const Uint8 &,const Uint8 &,const Uint8 &)'
1>          with
1>          
1>              bpp=4,
1>              incrementPtr=0
1>          ]
1>e:\programy\visual studio ultimate\vc\include\utility(142): warning C4506: no definition for inline function 'void ColorPutter<bpp,incrementPtr>::PutColor(Uint8 *&,const Uint8 &,const Uint8 &,const Uint8 &)'
1>          with
1>          
1>              bpp=4,
1>              incrementPtr=0
1>          ]
1>e:\programy\visual studio ultimate\vc\include\utility(142): warning C4506: no definition for inline function 'void ColorPutter<bpp,incrementPtr>::PutColor(Uint8 *&,const Uint8 &,const Uint8 &,const Uint8 &,const Uint8 &)'
1>          with
1>          
1>              bpp=2,
1>              incrementPtr=0
1>          ]
1>e:\programy\visual studio ultimate\vc\include\utility(142): warning C4506: no definition for inline function 'void ColorPutter<bpp,incrementPtr>::PutColor(Uint8 *&,const Uint8 &,const Uint8 &,const Uint8 &)'
1>          with
1>          
1>              bpp=2,
1>              incrementPtr=0
1>          ]
1>  CCursorHandler.cpp
1>  CDefHandler.cpp
1>  CGameInfo.cpp
1>  CGameInterface.cpp
1>  CHeroWindow.cpp
1>  CKingdomInterface.cpp
1>  Client.cpp
1>  CMessage.cpp
1>e:\vcmi\trunk\client\cherowindow.cpp(94): warning C4355: 'this' : used in base member initializer list
1>e:\vcmi\trunk\client\ckingdominterface.cpp(73): warning C4305: 'argument' : truncation from 'int' to 'bool'
1>e:\vcmi\trunk\client\ckingdominterface.cpp(403): warning C4305: 'argument' : truncation from 'int' to 'bool'
1>e:\vcmi\trunk\client\ckingdominterface.cpp(419): warning C4305: 'argument' : truncation from 'int' to 'bool'
1>e:\programy\visual studio ultimate\vc\include\xutility(2227): warning C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'
1>          e:\programy\visual studio ultimate\vc\include\xutility(2212) : see declaration of 'std::_Copy_impl'
1>          e:\programy\visual studio ultimate\vc\include\boost\algorithm\string\detail\classification.hpp(102) : see reference to function template instantiation '_OutIt std::copy<const char*,char*>(_InIt,_InIt,_OutIt)' being compiled
1>          with
1>          
1>              _OutIt=char *,
1>              _InIt=const char *
1>          ]
1>          e:\programy\visual studio ultimate\vc\include\boost\algorithm\string\classification.hpp(206) : see reference to function template instantiation 'boost::algorithm::detail::is_any_ofF<CharT>::is_any_ofF<boost::iterator_range<IteratorT>>(const RangeT &)' being compiled
1>          with
1>          
1>              CharT=char,
1>              IteratorT=const char *,
1>              RangeT=boost::iterator_range<const char *>
1>          ]
1>          e:\vcmi\trunk\client\cmessage.cpp(126) : see reference to function template instantiation 'boost::algorithm::detail::is_any_ofF<CharT> boost::algorithm::is_any_of<const char[2]>(RangeT (&))' being compiled
1>          with
1>          
1>              CharT=char,
1>              RangeT=const char [2]
1>          ]
1>  CMT.cpp
1>  CMusicHandler.cpp
1>e:\programy\visual studio ultimate\vc\include\boost\interprocess\detail\move.hpp(342): error C2440: 'return' : cannot convert from 'InternalLock' to 'boost::interprocess::scoped_lock<Mutex> &&'
1>          with
1>          
1>              Mutex=boost::interprocess::interprocess_mutex
1>          ]
1>          You cannot bind an lvalue to an rvalue reference
1>          e:\programy\visual studio ultimate\vc\include\boost\interprocess\sync\emulation\interprocess_condition.hpp(97) : see reference to function template instantiation 'boost::interprocess::scoped_lock<Mutex> &&boost::interprocess::move<InternalLock&>(T)' being compiled
1>          with
1>          
1>              Mutex=boost::interprocess::interprocess_mutex,
1>              T=InternalLock &
1>          ]
1>e:\programy\visual studio ultimate\vc\include\boost\interprocess\detail\move.hpp(342): error C2440: 'return' : cannot convert from 'boost::interprocess::mapped_region' to 'boost::interprocess::mapped_region &&'
1>          You cannot bind an lvalue to an rvalue reference
1>          e:\programy\visual studio ultimate\vc\include\boost\interprocess\mapped_region.hpp(159) : see reference to function template instantiation 'boost::interprocess::mapped_region &&boost::interprocess::move<boost::interprocess::mapped_region&>(T)' being compiled
1>          with
1>          
1>              T=boost::interprocess::mapped_region &
1>          ]
1>e:\programy\visual studio ultimate\vc\include\boost\interprocess\detail\move.hpp(342): error C2440: 'return' : cannot convert from 'boost::interprocess::shared_memory_object' to 'boost::interprocess::shared_memory_object &&'
1>          You cannot bind an lvalue to an rvalue reference
1>          e:\programy\visual studio ultimate\vc\include\boost\interprocess\shared_memory_object.hpp(85) : see reference to function template instantiation 'boost::interprocess::shared_memory_object &&boost::interprocess::move<boost::interprocess::shared_memory_object&>(T)' being compiled
1>          with
1>          
1>              T=boost::interprocess::shared_memory_object &
1>          ]
1>  CPlayerInterface.cpp
1>  CPreGame.cpp
1>  CSndHandler.cpp
1>  CSpellWindow.cpp
1>  CThreadHelper.cpp
1>  CVideoHandler.cpp
1>  Graphics.cpp
1>  GUIBase.cpp
1>  GUIClasses.cpp
1>  mapHandler.cpp
1>  NetPacksClient.cpp
1>  SDL_Extensions.cpp
1>  SDL_framerate.cpp
1>e:\vcmi\trunk\client\guiclasses.cpp(4062): warning C4305: 'argument' : truncation from 'int' to 'bool'
1>e:\vcmi\trunk\client\guiclasses.cpp(4068): warning C4305: 'argument' : truncation from 'int' to 'bool'
1>e:\vcmi\trunk\client\guiclasses.cpp(4073): warning C4305: 'argument' : truncation from 'int' to 'bool'
1>e:\programy\visual studio ultimate\vc\include\xutility(2227): warning C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'
1>          e:\programy\visual studio ultimate\vc\include\xutility(2212) : see declaration of 'std::_Copy_impl'
1>          e:\programy\visual studio ultimate\vc\include\boost\algorithm\string\detail\classification.hpp(102) : see reference to function template instantiation '_OutIt std::copy<const char*,char*>(_InIt,_InIt,_OutIt)' being compiled
1>          with
1>          
1>              _OutIt=char *,
1>              _InIt=const char *
1>          ]
1>          e:\programy\visual studio ultimate\vc\include\boost\algorithm\string\classification.hpp(206) : see reference to function template instantiation 'boost::algorithm::detail::is_any_ofF<CharT>::is_any_ofF<boost::iterator_range<IteratorT>>(const RangeT &)' being compiled
1>          with
1>          
1>              CharT=char,
1>              IteratorT=const char *,
1>              RangeT=boost::iterator_range<const char *>
1>          ]
1>          e:\vcmi\trunk\client\guiclasses.cpp(6365) : see reference to function template instantiation 'boost::algorithm::detail::is_any_ofF<CharT> boost::algorithm::is_any_of<const char[2]>(RangeT (&))' being compiled
1>          with
1>          
1>              CharT=char,
1>              RangeT=const char [2]
1>          ]
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:55.23
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Swoją drogą to dziwne, że brakowało mi tyle plików. Podejrzewam, że szkoda stała się podczas konwersji. Konwertowałem wcześniej sporo programów, oczywiście nie o takiej skali, i błędów nie było.

Ten błąd z kompilacją klienta to właśnie objaw problemów z boostem 1.44. Albo zaktualizuj do 1.45 lub 1.46, albo zdefiniuj makro BOOST_NO_RVALUE_REFERENCES w każdym pliku załączającym boost interprocess (czyli w tych plikach, których kompilacja się nie powiedzie). Podobne problemy będziesz miał przy serwerze.

Dodanie makra nie pomaga. Błędy takie same. Co do nowszych wersji boosta jest taki problem, że nie mają skompilowanych bibliotek libboost których się domaga linker. Mógłbym sam skompilować ale nigdzie nie znalazłem solucji budujących te liby, a na własną rękę trochę ciężko stworzyć projekty dla ok. 30 libów. Dzisiaj nie miałem czasu poeksperymentować. Może jutro znajdę jakieś rozwiązanie.

fenuks, istnieje coś takiego jak makefile prawda?
a poza tym boost ma własny mechanizm autobudowania bibliotek który wystarczy odpalić
(bodajże nazywał się bjam)

nawet ja to wiem :mrgreen:

Tak jest, bjam. Kiedyś tam mieli zmienić nazwę, ale najwidoczniej nic im z tego nie wyszło. :wink:

Musisz dodać makro na samym początku feralnych plików, przed include’ami. Wtedy i tylko wtedy pomoże. [Alternatywnie możesz je globalnie zdefiniować w projekcie poprzez opcje kompilatora, ale to już trudniejszy wariant.]

Bez urazy, ale nie mogę się oprzeć wrażeniu, iż uniknąłbyś większości swoich problemów, gdybyś nieco chętniej i nieco szerzej czytał:
W tym wątku zamieściłęm link do paczki z względnie nowymi projektami dla Visuala 2010, dosłownie parę plików się od tego czasu ruszyło. W ciągu kilku najbliższych dni mam nadzieję umieścić na SVN-ie nowe pliki. W tym wątku był też poruszany problem Boosta 1.44, który zaobserwowałeś.

Budowanie Boosta naprawdę nie wymaga trudnych eksperymentów. Sprowadza się do wydania dokładnie dwu (no dobrze, nie licząc „cd” do folderu Boosta :stuck_out_tongue: ) komend w linii poleceń Visuala. Zaglądając do dokumentacji Boosta nie jest problemem je odszukać: boost.org/doc/libs/1_46_1/mo … rom-source

Polecam zbudować najnowszego Boosta, niemniej jeśli jest to dla Ciebie kłopotliwe, a makro dalej nie pomaga, to zawsze możesz ściągnąć 1.43 z binarkami, też jest póki co wspierany.

Wreszcie znalazłem trochę czasu, i udało mi się to wszystko poskładać do kupy i skompilować, aczkolwiek:
Błąd wywalany przy próbie debugu:

Unhandled exception at 0x76ceb727 in VCMI_client.exe: Microsoft C++ exception: std::basic_string<char,std::char_traits<char>,std::allocator<char> > at memory location 0x0042ee30..

Log debuga:

'VCMI_client.exe': Loaded 'D:\VCMI\trunk\VCMI_client.exe', Symbols loaded.
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'D:\VCMI\trunk\SDL.dll', Binary was not built with debug information.
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\winmm.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\msvcrt.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\user32.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\gdi32.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\lpk.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\usp10.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\advapi32.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\sechost.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\rpcrt4.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\sspicli.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\cryptbase.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'D:\VCMI\trunk\zlib1.dll', Binary was not built with debug information.
'VCMI_client.exe': Loaded 'D:\VCMI\trunk\SDL_image.dll', Binary was not built with debug information.
'VCMI_client.exe': Loaded 'D:\VCMI\trunk\SDL_ttf.dll', Binary was not built with debug information.
'VCMI_client.exe': Loaded 'D:\VCMI\trunk\SDL_mixer.dll', Binary was not built with debug information.
'VCMI_client.exe': Loaded 'D:\VCMI\trunk\VCMI_lib.dll', Symbols loaded.
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\msvcp100d.dll', Symbols loaded.
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\msvcr100d.dll', Symbols loaded.
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\dbghelp.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\ws2_32.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\nsi.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\ole32.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\oleaut32.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\apphelp.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\AppPatch\AcLayers.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\shell32.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\shlwapi.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\userenv.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\profapi.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\winspool.drv', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\mpr.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\imm32.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\msctf.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\uxtheme.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\dwmapi.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\KBDUS.DLL', Cannot find or open the PDB file
'VCMI_client.exe': Unloaded 'C:\Windows\SysWOW64\KBDUS.DLL'
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\KBDPL1.DLL', Cannot find or open the PDB file
'VCMI_client.exe': Unloaded 'C:\Windows\SysWOW64\KBDPL1.DLL'
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\dsound.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\powrprof.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\setupapi.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\cfgmgr32.dll', Cannot find or open the PDB file
'VCMI_client.exe': Loaded 'C:\Windows\SysWOW64\devobj.dll', Cannot find or open the PDB file
First-chance exception at 0x76ceb727 in VCMI_client.exe: Microsoft C++ exception: std::basic_string<char,std::char_traits<char>,std::allocator<char> > at memory location 0x0042ee30..
Unhandled exception at 0x76ceb727 in VCMI_client.exe: Microsoft C++ exception: std::basic_string<char,std::char_traits<char>,std::allocator<char> > at memory location 0x0042ee30..
First-chance exception at 0x76ceb727 in VCMI_client.exe: Microsoft C++ exception: std::basic_string<char,std::char_traits<char>,std::allocator<char> > at memory location 0x0042ee24..
Unhandled exception at 0x76ceb727 in VCMI_client.exe: Microsoft C++ exception: std::basic_string<char,std::char_traits<char>,std::allocator<char> > at memory location 0x0042ee24..
First-chance exception at 0x76ceb727 in VCMI_client.exe: Microsoft C++ exception: std::basic_string<char,std::char_traits<char>,std::allocator<char> > at memory location 0x0042ee24..
Unhandled exception at 0x76ceb727 in VCMI_client.exe: Microsoft C++ exception: std::basic_string<char,std::char_traits<char>,std::allocator<char> > at memory location 0x0042ee24..
The program '[5412] VCMI_client.exe: Native' has exited with code -1073741510 (0xc000013a).

Ktoś ma jakieś sugestie?? Jak odwalam głupotę jakąś to sory z góry :wink:

Oho, widzę, że szykuje się nam kolejny deweloper! :slight_smile:

Zasadniczo log debugera jest dla mnie bezużyteczny. Log generowany normalnie przez VCMI pozostaje cennym źródłem informacji o tym, co się działo, natomiast gdy uruchamiasz VCMI przez debugger, to zyskujesz dostęp do kluczowej informacji: stosu wywołań — można dokładnie dzięki temu określić, gdzie nastąpił crash i skąd tam się wzięliśmy.

Powininieś mieć gdzieś panel „Call Stack” (a jeśli nie: Debug -> Windows -> Call Stack) — gdy VCMI się wywali i debuger to złapie, będziesz miał tam stos wywołań do problematycznej instrukcji. Możesz się przez niego przeklikać, badając konteksty kolejnych wywołań, które wywiodły program na manowce. (Albo po prostu przekopiować całość zawartości i tu wkleić.)

Z typowych błędów… 99%, że brakuje jakichś plików gry w lokalizacji, w której uruchamiasz VCMI. W projekcie klienta sprawdź Debugging -> Working Directory oraz General -> Output Directory. Najprościej jest budować do folderu z solucją i niech on też będzie fodlerem roboczym. (Na SVN-ie pliki projektu tak powinny być domyślnie skonfigurowane) Wtedy jednak musisz do fodleru z solucją przekopiowac także wszystkie pliki gry.
Ale nie wykluczam, że to coś ciekawszego. :wink: Daj znać, co Ci wyszło z tych moich rad. :slight_smile:

[Domniemywam, że odpalasz toto „po bożemu”, czyli Start Debugging aka F5?]

Dobrze domniemywasz, odpalam “po bożemu” :smiley:
Wiem na pewno (99 % :wink: ) że nie chodzi o brakujące pliki, próbowałem “toto” odpalać i z folderu z solucją po ówczesnym dograniu tam potrzebnych plików (zgodnie z tym co na wiki), i po podmianie skompilowanych plików za pliki VCMI z ostatniego wydania. W obu przypadkach oczywiście ten sam ZONK.

Call stack:

 	KernelBase.dll!76ceb727() 	
 	[Frames below may be incorrect and/or missing, no symbols loaded for KernelBase.dll]	
 	KernelBase.dll!76ceb727() 	
 	msvcr100d.dll!_CxxThrowException(void * pExceptionObject, const _s__ThrowInfo * pThrowInfo)  Line 157	C++
>	VCMI_client.exe!checkForError(bool throwing)  Line 48	C++
 	VCMI_client.exe!DLLHandler::Instantiate(const char * filename)  Line 70 + 0x7 bytes	C++
 	VCMI_client.exe!CSmackPlayer::CSmackPlayer()  Line 281	C++
 	VCMI_client.exe!CVideoPlayer::CVideoPlayer()  Line 403 + 0x5e bytes	C++
 	VCMI_client.exe!wmain(int argc, wchar_t * * argv)  Line 261 + 0x2b bytes	C++
 	VCMI_client.exe!__tmainCRTStartup()  Line 552 + 0x19 bytes	C
 	VCMI_client.exe!wmainCRTStartup()  Line 371	C
 	kernel32.dll!769d33ca() 	
 	ntdll.dll!77539ed2() 	
 	ntdll.dll!77539ea5() 	

Czyli wnioskuję (jeśli dobrze wyczytałem cokolwiek z kodu) że problem leży jednak gdzieś w plikach. Jakby brakowało jakichś bibliotek, nie pochodzących bezpośrednio z VCMI (???). Wydaje mi się to przynajmniej odrobinkę dziwne.

EDIT:
Tutaj jeszcze log clienta zdający się potwierdzać problem z jakimś dll-em:

Creating console and logfile: 2
Loading settings: 527
VCMI 0.85b (client)
New screen flags: 0
	Initializing screen: 599
Failed loading smackw32.dll
Error 126 encountered!
Error: Nie można odnaleźć określonego modułu.


Failed to find _SmackNextFrame@4 in smackw32.dll
Error 127 encountered!
Error: Nie można odnaleźć określonej procedury.


Failed to find _SmackWait@4 in smackw32.dll
Error 127 encountered!
Error: Nie można odnaleźć określonej procedury.


Failed to find _SmackDoFrame@4 in smackw32.dll
Error 127 encountered!
Error: Nie można odnaleźć określonej procedury.


Failed to find _SmackToBuffer@28 in smackw32.dll
Error 127 encountered!
Error: Nie można odnaleźć określonej procedury.


Failed to find _SmackOpen@12 in smackw32.dll
Error 127 encountered!
Error: Nie można odnaleźć określonej procedury.


Failed to find _SmackSoundOnOff@8 in smackw32.dll
Error 127 encountered!
Error: Nie można odnaleźć określonej procedury.


Failed to find _SmackClose@4 in smackw32.dll
Error 127 encountered!
Error: Nie można odnaleźć określonej procedury.


Failed to find _SmackVolumePan@16 in smackw32.dll
Error 127 encountered!
Error: Nie można odnaleźć określonej procedury.


Failed loading BINKW32.DLL
Error 126 encountered!
Error: Nie można odnaleźć określonego modułu.


Failed to find _BinkOpen@8 in BINKW32.DLL
Error 127 encountered!
Error: Nie można odnaleźć określonej procedury.


Failed to find _BinkSetSoundSystem@8 in BINKW32.DLL
Error 127 encountered!
Error: Nie można odnaleźć określonej procedury.


Failed to find _BinkNextFrame@4 in BINKW32.DLL
Error 127 encountered!
Error: Nie można odnaleźć określonej procedury.


Failed to find _BinkDoFrame@4 in BINKW32.DLL
Error 127 encountered!
Error: Nie można odnaleźć określonej procedury.


Failed to find _BinkCopyToBuffer@28 in BINKW32.DLL
Error 127 encountered!
Error: Nie można odnaleźć określonej procedury.


Failed to find _BinkWait@4 in BINKW32.DLL
Error 127 encountered!
Error: Nie można odnaleźć określonej procedury.


Failed to find _BinkClose@4 in BINKW32.DLL
Error 127 encountered!
Error: Nie można odnaleźć określonej procedury.


./Data/H3ab_ahd.vid doesn't contain needed data!
	Initializing video: 343700
	Initializing minors: 0

Lista potrzebnych plików z wiki jest trochę niekompletna. W working directory klienta (projekt VCMI_Client -> Properties -> Debugging -> Working directory) powinny być jeszcze na pewno dllki do odtwarzania wideo (smackw32.dll, binkw32.dll).

Swoją drogą komunikaty o tym mówią — “Failed loading smackw32.dll”, “Failed loading BINKW32.DLL”, oba skopiowane z twojego loga.

Ok, sprawdzę, zdam raport :wink:

EDIT:
Rzeczywiście, “pacjentowi” polepszyło się po dodaniu tych bibliotek, aczkolwiek nadal otrzymuję błąd związany najprawdopodobniej z typem zmiennej (?). Zaraz dorzucę do posta loga…

EDIT2:
Call stack:

>	msvcr100d.dll!_heap_alloc_dbg_impl(unsigned int nSize, int nBlockUse, const char * szFileName, int nLine, int * errno_tmp)  Line 415 + 0x1e bytes	C++
 	msvcr100d.dll!_nh_malloc_dbg_impl(unsigned int nSize, int nhFlag, int nBlockUse, const char * szFileName, int nLine, int * errno_tmp)  Line 239 + 0x19 bytes	C++
 	msvcr100d.dll!_nh_malloc_dbg(unsigned int nSize, int nhFlag, int nBlockUse, const char * szFileName, int nLine)  Line 302 + 0x1d bytes	C++
 	msvcr100d.dll!malloc(unsigned int nSize)  Line 56 + 0x15 bytes	C++
 	msvcr100d.dll!operator new(unsigned int size)  Line 59 + 0x9 bytes	C++
 	VCMI_lib.dll!operator new](unsigned int count)  Line 6 + 0x9 bytes	C++
 	VCMI_lib.dll!CLodHandler::init(std::basic_string<char,std::char_traits<char>,std::allocator<char> > lodFile, std::basic_string<char,std::char_traits<char>,std::allocator<char> > dirName)  Line 276 + 0x1f bytes	C++
 	VCMI_lib.dll!LibClasses::LibClasses()  Line 252	C++
 	VCMI_lib.dll!initDLL(CConsoleHandler * Console, std::basic_ostream<char,std::char_traits<char> > * Logfile)  Line 48 + 0x2b bytes	C++
 	VCMI_client.exe!init()  Line 145 + 0x19 bytes	C++
 	VCMI_client.exe!boost::detail::thread_data<void (__cdecl*)(void)>::run()  Line 61 + 0xa bytes	C++
 	VCMI_client.exe!boost::`anonymous namespace'::thread_start_function(void * param)  Line 172	C++
 	msvcr100d.dll!_callthreadstartex()  Line 314 + 0xf bytes	C
 	msvcr100d.dll!_threadstartex(void * ptd)  Line 297	C
 	kernel32.dll!769d33ca() 	
 	[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]	
 	ntdll.dll!77539ed2() 	
 	ntdll.dll!77539ea5() 	

Co może być nie tak? Coś z kodem, czy znowu u mnie jakieś farmazony porobione :wink: ?

Na moje oko, to brakuje któregoś z plików .lod. Choć w sumie nie powinno wtedy zajść tak daleko — może więc któryś jest uszkodzony? Wywala się na alokacji pamięci z operatora alokowania tablicy new] — pewnie VCMI spróbowało zaalokować jakąś głupią liczbę elementów. Operator new] jest wołany z funkcji init w klasie obsługującej archiwa .lod (CLodHandler).

W stosie wywołań dwa razy kliknij na linię VCMI_lib.dll!CLodHandler::init. Następnie sprawdź o jakie archiwum się pluje — zmienna lodFile powinna przechowywać nazwę feralnego archiwum. Możesz sprawdzić jej zawartość najeżdżając na nią myszą, bądź też przez Debug -> Locals (potem w panelu ctrl+a, ctrl+c i masz wszystkie zmienne lokalne w schowku). Zmienna totalFiles przechowuje liczbę alokowanych elementów (informacji o plikach w archiwum). Też ją sprawdź — bo pewnie ma głupią wartość.

Czy log klienta nie zawiera żadnych użytecznych informacji?

Gdyby log klienta zawierał coś ciekawego, też bym go dołączył :wink:
No ale proszę bardzo, może jestem ślepy :wink:

Creating console and logfile: 2
Loading settings: 529
VCMI 0.85b (client)
New screen flags: 0
	Initializing screen: 577
./Data/H3ab_ahd.vid doesn't contain needed data!
	Initializing video: 14
	Initializing minors: 0
	Loading default system settings: 21
	Initializing sound: 632
Initializing screen and sound handling: 656

Rozumiem że foch dotyczący pliku H3ab_ahd.vid nie ma związku?

EDIT: wiadomo co poniżej dodałem :wink:

+		this	0x0a2871f0 {extMap=[11]((".BMP", FILE_GRAPHICS),(".DEF", FILE_ANIMATION),(".FNT", FILE_FONT),(".H3C", FILE_CAMPAIGN),(".H3M", FILE_MAP),(".JPG", FILE_GRAPHICS),(".MSG", FILE_MASK),(".MSK", FILE_MASK),(".PCX", FILE_GRAPHICS),(".PNG", FILE_GRAPHICS),(".TXT", FILE_TEXT)) LOD={...} totalFiles=3435973836 ...}	CLodHandler * const
+		lodFile	"./Data/H3ab_bmp.lod"	std::basic_string<char,std::char_traits<char>,std::allocator<char> >
+		dirName	"./Data"	std::basic_string<char,std::char_traits<char>,std::allocator<char> >
+		lodEntries	0xcccccccc {filename=0xcccccccc <Bad Ptr> offset=??? uncompressedSize=??? ...}	LodEntry *
+		enddir	{m_imp={...} }	boost::filesystem2::basic_recursive_directory_iterator<boost::filesystem2::basic_path<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,boost::filesystem2::path_traits> >
		temp	3435973836	unsigned int

Chyba widzę problem, zaraz zdam raport czy wypali mój pomysł :wink:

Kurde to działa! Okazało się że rzeczywiście plik .lod był uszkodzony, jego podmiana pomogła!
Dzięki za pomoc, jak będę miał chwilę, to upatrzę sobie na bugtrackerze jakiś błąd i spróbuję zdiagnozować :wink: