Problem ze skompilowaniem

#1

Witam.

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 " ([email protected]@@[email protected]@XZ) referenced in function "public: bool __thiscall CGameHandler::buildBoat(unsigned long)" ([email protected]@@[email protected])
1>CGameHandler.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: int __thiscall IBoatGenerator::state(void)const " ([email protected]@@QBEHXZ) referenced in function "public: bool __thiscall CGameHandler::buildBoat(unsigned long)" ([email protected]@@[email protected])
1>CGameHandler.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: int __thiscall CGHeroInstance::getSpellCost(class CSpell const *)const " ([email protected]@@[email protected]@@Z) referenced in function "public: bool __thiscall CGameHandler::castSpell(class CGHeroInstance const *,int,class int3 const &)" ([email protected]@@[email protected]@[email protected]@@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?

Z góry dziękuję za odpowiedź i pozdrawiam!

#2

Linker coś nie może schwycić funkcji eksportowanych przez VCMI_lib. najpewniej nie próbuje albo nie potrafi się dobrać do .liba.

  1. 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?
  2. 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ć.)
#3

Witam!

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! :open_mouth:

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.

#4

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ść.

Miłej eksploracji naszych straszliwych źródeł! :wink:

#5

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. :frowning: