Przed paroma chwilami zassałem sobie źródła z vcmi.svn.sourceforge.net/svnroot/vcmi. I dalej spróbowałem skompilować projekt. I o ile VCMI_lib nie było większych przejść, o tyle już z VCMI_server nie dałem rady. Przy próbie zbudowania VCMI_server dostaję takie coś:
1>Linking...
1> Creating library C:\Users\Arthus\Desktop\VCMI\trunk\server\\VCMI_server.lib and object C:\Users\Arthus\Desktop\VCMI\trunk\server\\VCMI_server.exp
1>CGameHandler.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class int3 __thiscall IBoatGenerator::bestLocation(void)const " (__imp_?bestLocation@IBoatGenerator@@QBE?AVint3@@XZ) referenced in function "public: bool __thiscall CGameHandler::buildBoat(unsigned long)" (?buildBoat@CGameHandler@@QAE_NK@Z)
1>CGameHandler.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: int __thiscall IBoatGenerator::state(void)const " (__imp_?state@IBoatGenerator@@QBEHXZ) referenced in function "public: bool __thiscall CGameHandler::buildBoat(unsigned long)" (?buildBoat@CGameHandler@@QAE_NK@Z)
1>CGameHandler.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: int __thiscall CGHeroInstance::getSpellCost(class CSpell const *)const " (__imp_?getSpellCost@CGHeroInstance@@QBEHPBVCSpell@@@Z) referenced in function "public: bool __thiscall CGameHandler::castSpell(class CGHeroInstance const *,int,class int3 const &)" (?castSpell@CGameHandler@@QAE_NPBVCGHeroInstance@@HABVint3@@@Z)
I z tym problemem zwracam się do Was - nie rozumiem o co kompilatorowi chodzi. Przejrzałem źródła z VCMI_lib i znalazłem brakujące metody. O co chodzi? Gdzie się muszę poprawić, aby skompilować projekt?
Linker coś nie może schwycić funkcji eksportowanych przez VCMI_lib. najpewniej nie próbuje albo nie potrafi się dobrać do .liba.
Czy użyłeś aktualnych plików projektu z repozytorium? Czy w ustawieniach projektu (Linker -> Input) w polu Additional Dependencies znajduje się VCMI_lib.lib?
Czy na pewno VCMI_lib w pełni poprawnie, do końca się zbudował? Czy wygenerowane zostały pliki VCMI_lib.dll i VCMI_lib.lib? Czy pliki te znajdują się w folderze widocznym dla linkera (Linker -> General -> pole Additional Library Directories)?
(Domyślnie jest to folder trunka, nadrzędny do plików poszczególnych projektów. Jeśli postawiłeś to w jakimś innym układzie, to ściezki musisz stosowanie poprawić.)
Dzięki za propozycje rozwiązań, jednak tutaj było coś innego. Nie wiem co, chyba jakaś magia “zrestartowanego komputera”. Dziś rano usiadłem i przekompilowałem jeszcze raz od początku (dokładnie tak samo, jak robiłem wczoraj) i zadziałało!
Jeszcze raz dzięki za rady!
Pozdrawiam.
Edytka:
Zagadka rozwiązana, a przynajmniej sposób na jej ominięcie: przypadłość występuje, gdy używacie VSC++ 2008EE. Po pierwszym uruchomieniu pobranych coś się źle importuje. Należy zrestartować środowisko i będzie ok.
Heh. Najprostsze rozwiązania - jak przebudowa projektu - często okazują się najlepsze (sam miałem kilka takich dziwnych błędów), a jakoś trudno na nie w takiej sytuacji wpaść.
Właśnie nie - to jest jakiś “większy” bug VS. Przebudowanie projektu, czy też czyszczenie i budowanie nie są rozwiązaniem. Przed pierwszym uruchomieniem ściągniętych źródeł trzeba ponownie uruchomić całe VS - w przeciwnym wypadku dzieją się takie rzeczy. Zaobserwowane także na VCMI_client.