Jak co jakiś czas zerknąłem na stronę VCMI. Bardzo zaskoczył mnie fakt otwarcia źródeł :D. Od razu zrobiłem svn co aby co i jak :). Zauważyłem bardzo ciekawe pliki, a dokładniej to pliki od autotoolsa (makefile, configure itd).
Oczywiście musiałem sprawdzić czy uda mi się skompilować jednak nic mi nie wychodzi. Mogę parę błędów podać. Pierwsze to
Quote:
./configure: line 3200: AX_BOOST_SYSTEM: command not found
./configure: line 3201: AX_BOOST_FILESYSTEM: command not found
./configure: line 3202: AX_BOOST_THREAD: command not found
Ale zostają zignorowane. Następnie
Quote:
./configure: line 3199: syntax error near unexpected token `1.33'
./configure: line 3199: `AX_BOOST_BASE(1.33)'
I tu już nie chce iść dalej. Wywaliłem więc tą linijkę ( AX_BOOST_BASE(1.33) ) i poszlo.
To bardziej nie problem skryptu ale przydało by się ustalić jakąs zmienna dla lui ponieważ szuka llua a ja mam przynajmniej 3 lua na pc i żadna nie identyfikuję się jako llua (llua50, llua5.1 i llua5.1-svn). Wystarczy coś jak LUA_LDFLAGS
Poszło dalej, jednak zatrzymuję się na
Quote:
checking lstate.h usability... no
checking lstate.h presence... no
checking for lstate.h... no
configure: error: lstate.h header not found. Please install it.
Niestety ale nigdzie nie moge znaleźć tego pliku :P Może ktoś pomoże?
Mam jednak nadzieje, że kompilacja na Linuksie jest możliwa ^^. Tak czy siak postaram się jeszcze dzisiaj ponownie napisać o VCMI na gry.ubuntu.pl
Joined: 01 Feb 2008 Posts: 810 Location: Kraków, Poland
Posted: 2009-02-06, 16:32
W zakresie tych plików autotoolsa, to niestety nie jestem w stanie wiele pomóc, gdyż ich nie tworzyłem, nie utrzymywałem i nie używałem.
Okiem nieuzbrojonym jednak patrząc, to radziłbym po prostu wyharatać z tychże plików wszelkie wzmianki o Lui, w tym lstate.h. Nie powinna być już do niczego potrzeba.
Co do boosta, to nie wiem skąd to 1.33, skoro wymaganą wersją jest 1.36 lub nowsza.
VCMI powinno się dać w miarę gładko zbudować na Linuksie, zwłaszcza skoro pod MinGW-em się kompiluje (choć chyba z umiarkowanie szczęśliwymi owocami). Problemem mogą być właśnie te pliki konfiguracyjne, ale chyba nie jest wielkim problemem stworzenie ich w razie potrzeby od nowa.
Podzielę się jeszcze kompletem potrzebnych bibliotek i wersjami w jakich je posiadam, bo widzę, że dane z tych configure'ów są jakieś podejrzane:
* SDL 1.2.13 (od niedawna, wcześniej miałem 1.2.11 i nie było różnic)
* SDL_TTF 2.0.8 (nowszy też niby działa, ale jakoś inaczej wyświetla)
* SDL_Image 1.2.5
* SDL_Mixer 1.2.7
* zlib 1.2.3
* boost 1.37.0
_________________ VCMI is a work in progress.
VCMI is NOT an another mod.
Skoruppa Guest
Posted: 2009-02-06, 18:23
No to wszystko udało mi się ominąć... poza jednym
Quote:
configure.ac:65: required file `AI/Makefile.in' not found
Coś w 0.7 z AI było robione ale skoro mówisz, że ten autotools jest już zapomniany to też nikt nie zadbał aby odpowiednie rzeczy znalazły się w AI :). Jakieś rady?
Skoruppa Guest
Posted: 2009-02-06, 18:36
Dałem pusty makefile.in. Zobaczymy co z tego wyjdzie.
Skoruppa Guest
Posted: 2009-02-06, 18:50
Znów ja :P
Cały lib poszedł a client nie przeszedł. Mam ten sam boost co ty ale pełno błędów:
http://wklej.org/id/49518/txt
Age: 21 Joined: 13 Aug 2008 Posts: 75 Location: Nowa Sól, Poland
Posted: 2009-02-06, 20:44
Skoruppa wrote:
Znów ja :P
Cały lib poszedł a client nie przeszedł. Mam ten sam boost co ty ale pełno błędów:
http://wklej.org/id/49518/txt
Wydaje mi się że masz inne nazwy libów bosta niż te z makefile, u mnie np jest: libboost_thread-mgw34-mt-1_37.lib a w makefile jest o ile się nie mylę to zamiast mgw32 jest gcc.
Skoruppa Guest
Posted: 2009-02-06, 22:34
Rozwiązanie było oczywiste :P
dopisałem tylko na sztywno -lboost_system-mt -lboost_thread-mt -lboost_filesystem-mt oraz -I/usr/include/boost do makefile, ale niestety pusty makefile.in nie był genialnym pomysłem bo
Quote:
Making all in AI
make[2]: Wejście do katalogu `/home/skoruppa/Pulpit/vcmi/AI'
make[2]: *** Brak reguł do wykonania obiektu `all'. Stop.
make[2]: Opuszczenie katalogu `/home/skoruppa/Pulpit/vcmi/AI'
make[1]: *** [all-recursive] Błąd 1
make[1]: Opuszczenie katalogu `/home/skoruppa/Pulpit/vcmi'
make: *** [all] Błąd 2
chyba, że ich nie trzeba kompilować a są tylko icludowane. Jeśli tak to właśnie udało mi się skomplować bo mam 2 binarki :D vcmclient i vcmiserver. Nie wiem do końca po co vcmiserver ale client mam wgrać teraz do folderu heroes3 (z obiema dodatkami?) i z wogiem?
Age: 21 Joined: 13 Aug 2008 Posts: 75 Location: Nowa Sól, Poland
Posted: 2009-02-06, 23:29
Skoruppa wrote:
chyba, że ich nie trzeba kompilować a są tylko icludowane. Jeśli tak to właśnie udało mi się skomplować bo mam 2 binarki :D vcmclient i vcmiserver. Nie wiem do końca po co vcmiserver ale client mam wgrać teraz do folderu heroes3 (z obiema dodatkami?) i z wogiem?
obie binarki skopiuj, bo client uuchamia server w trakcie :)
Skoruppa Guest
Posted: 2009-02-07, 00:34
No i pupcia :P
Quote:
skoruppa@skoruppa-desktop:~/.wine/drive_c/Program Files/Heroes of Might and Magic III (copy)$ ./vcmiclient
Starting...
Creating console and logfile: 0
Loading settings: 30000
VCMI 0.7b (client)
Initializing screen: 40000
Initializing minors: 0
Initializing fonts: 0
Initializing sound: 20000
Initializing screen, fonts and sound handling: 90000
Loading .lod files: 90000
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr
Aborted (core dumped)
Joined: 01 Feb 2008 Posts: 810 Location: Kraków, Poland
Posted: 2009-02-07, 04:54
Skoruppa wrote:
chyba, że ich nie trzeba kompilować a są tylko icludowane.
AI to są osobne dynamiczne biblioteki. Obecnie są dwa AI, z czego jedno nic nie robi, więc zostaje drugie - GeniusAI.
Skryptów do budowania go nie ma, ale składa się z dwóch plików na krzyż, więc kompilacja nie powinna być problemem. Są to CGeniusAI.cpp DLLMain.cpp - zbudować, zlinkować z VCMI_lib i powinno starczyć.
Skoruppa wrote:
Jeśli tak to właśnie udało mi się skomplować bo mam 2 binarki :D vcmclient i vcmiserver.
Mało! Powinieneś mieć jeszcze VCMI_lib (libvcmi). Chyba, że Ci go statycznie włączyło w obręb pozostałych binarek. Sprawdź, co się dzieje z libem?
Skoruppa wrote:
[...]
Reading MINENAME
Reading MINEEVNT
Jak w czymś mogę pomóc to piście.
Wygląda, jakby znajdował więcej tekstów z opisem wydarzenia po wejściu do kopalni niż nazw kopalń. (Dość ewidentne wyjście poza zakres).
Możesz się tym plikom przyjrzeć i sprawdzić, czemu je źle łapie, albo doraźnie zablokować crasha dodając sprawdzanie zakresu przed wpisaniem tekstu wydarzenia w wektor (dodaj 'if(i < mines.size())' przed 'mines[i++].second = temp;').
_________________ VCMI is a work in progress.
VCMI is NOT an another mod.
Skoruppa Guest
Posted: 2009-02-07, 13:54
A mogę się spytać gdzie mam to dopisać? Tak przy okazji zaktualizowałem pliki dla autotoolsa i już ładnie configure oraz makefile generuję... mogę podesłać jak chcecie.
Joined: 01 Feb 2008 Posts: 810 Location: Kraków, Poland
Posted: 2009-02-07, 14:35
Już nie musisz, sam dopisałem i wgrałem na repozytorium, wystarczy, że uaktualnisz źródła (r714). Sprawdzanie zakresu zawsze lepiej mieć.
Z plikami może zaczekajmy, aż całość będzie owocować działającymi binarkami.
_________________ VCMI is a work in progress.
VCMI is NOT an another mod.
Może pomoże coś fakt, że system plików w Linuksie widzi różnice między dużym a małym znakiem przez co Config to nie to samo co config. Może po prostu jakiegoś pliku nie potrafi znaleźć i przez to odczytać...
Joined: 01 Feb 2008 Posts: 810 Location: Kraków, Poland
Posted: 2009-02-07, 15:46
Skoruppa wrote:
Zastanawia mnie dlaczego te liczby w stosunku do wersji Windowsowej są tak wielkie...
Zapewne inaczej zaimplementowano funkcję clock(), z której brane są te wartości. Ale to raczej niczego nie powinno psuć.
Skoruppa wrote:
Może pomoże coś fakt, że system plików w Linuksie widzi różnice między dużym a małym znakiem przez co Config to nie to samo co config. Może po prostu jakiegoś pliku nie potrafi znaleźć i przez to odczytać...
Nie, te wszystkie pliki są wewnątrz archiwum .lod. Jeżeli do samego archiwum się dobrał - a dobrał - to już jego obsługa jest w pełni z naszej strony.
Skoruppa wrote:
Niestety, dalej nic.
Ech, głupi jestem. Elegancko błąd wskazał na substr, a ja naiwnie kombinuję z wektorem. Coś z przetwarzaniem tych plików tekstowych jest nie tak.
Jaką wersję H3 masz tam wgraną? Zwykłą, angielską?
Najlepiej byłoby, jakbyś przeleciał to gdb. Ostatni wypis na log to hch/CGeneralTextHandler.cpp linia 237. Następny jest w linii 251. Nie dochodzi doń, wysypuje się więc gdzie pomiędzy tym. Sypie funkcja substr, więc może być to wywołanie 244. Crash może być, gdy string w tempie ma mniej niż dwa znaki, ale to zdecydowanie nie ma prawa mieć miejsca dla poprawnego tekstu. Alternatywnie błąd może jeszcze być wewnątrz wołanej linię wyżej funkcji loadToIt.
Przejedź po tym, sprawdź w którym momencie i miejscu następuje crash. Jakie w tym momencie są wartości zmiennych - i, it, buf, temp, mines (o ile gdb potrafi to jakoś ładnie wyświetlić).
_________________ VCMI is a work in progress.
VCMI is NOT an another mod.
Program received signal SIGABRT, Aborted.
[Switching to Thread 0xb741c700 (LWP 11747)]
0xb7fef430 in __kernel_vsyscall ()
(gdb) list
48 SDL_Surface * screen, * screen2;
49 extern SDL_Surface * CSDL_Ext::std32bppSurface;
50 std::queue<SDL_Event> events;
51 boost::mutex eventsM;
52 TTF_Font * TNRB16, *TNR, *GEOR13, *GEORXX, *GEORM, *GEOR16;
53 void processCommand(const std::string &message, CClient *&client);
54 #ifndef __GNUC__
55 int _tmain(int argc, _TCHAR* argv[])
56 #else
57 int main(int argc, char** argv)
(gdb) backtrace
#0 0xb7fb5430 in __kernel_vsyscall ()
#1 0xb79e86a0 in raise () from /lib/tls/i686/cmov/libc.so.6
#2 0xb79ea068 in abort () from /lib/tls/i686/cmov/libc.so.6
#3 0xb7ca18e8 in __gnu_cxx::__verbose_terminate_handler ()
from /usr/lib/libstdc++.so.6
#4 0xb7c9f7c5 in ?? () from /usr/lib/libstdc++.so.6
#5 0xb7c9f802 in std::terminate () from /usr/lib/libstdc++.so.6
#6 0xb7c9f93a in __cxa_throw () from /usr/lib/libstdc++.so.6
#7 0xb7c3691f in std::__throw_out_of_range () from /usr/lib/libstdc++.so.6
#8 0xb7c7c14a in std::string::substr () from /usr/lib/libstdc++.so.6
#9 0x082ab146 in CGeneralTextHandler::load (this=0xb542fbb0)
at ../hch/CGeneralTextHandler.cpp:244
#10 0x082a47d2 in LibClasses::init (this=0xb56b1090) at ./VCMI_Lib.cpp:153
#11 0x082a4cb2 in initDLL (b=0xb560f100, Console=0x8fdb2f0, Logfile=0x8fdb370)
at ./VCMI_Lib.cpp:31
#12 0x0815ae69 in main (argc=Cannot access memory at address 0x2dfb
) at ../CMT.cpp:112
(gdb) info frame
Stack level 0, frame at 0xbffd0a38:
eip = 0xb7fb5430 in __kernel_vsyscall; saved eip 0xb79e86a0
called by frame at 0xbffd0a48
Arglist at 0xbffd0a30, args:
Locals at 0xbffd0a30, Previous frame's sp is 0xbffd0a38
Saved registers:
ebp at 0xbffd0a28, eip at 0xbffd0a34
Nie wiem czy pomoże. Bardziej chyba debugować nie potrafię :P zobacze co jeszcze gdb potrafi...
You can post new topics in this forum You can reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum