Premessa: è stata una delle compilazioni più problematiche da me sperimentate ma dopo fix e controfix multipli alla fine è andata. Purtroppo Debian stavolta mi ha tradito: nulla ho potuto (dopo averne risolte di tutte) davanti a l’ennesimo inquietante segmentation fault e mi sono visto costretto a compilare il tutto su Ubuntu 11.04 col quale è andato tutto liscio.
In appendice riporterò comunque una serie di preziosi fix (che non voglio siano sprecati) per chi volesse tentare la cosa su Debian.
Veniamo al dunque, StuntRally è un gioco di simulazione di guida rallistica che nasce sulle orme di Vdrift (da cui il nome vdrift-ogre) .
Da ex appassionato della saga di Colin Mcrae Rally (che su wine non c’era verso) non potevo farmi sfuggire l’occasione di un Rally “serio” per linux anche se con ancora molte lacune.
Al momento StuntRally non supporta Gamepad e altri dispositivi (si guida con la tastiera).
Come molti di voi già sapranno esistono un paio di ppa ed il gioco è installabile da playdeb dopo aver provato entrambi i metodi sono andato incontro a problemi con le librerie che mi hanno costretto a desistere (magari voi sarete più fortunati).
Per quelli come me che provano un certo gusto masochistico a compilare e a sbattersi un po vedo di rimettere insieme i passaggi per Ubuntu 11.04 64 bit. ( si vede che non amo apt-get 🙂 ).
Prerequisiti dichiarati:
Ogre 1.7 (motore grafico 3d OpenSource)
MyGUI 3.0.x (Libreria per creare interfacce grafiche per giochi e applicazioni 3d)
Ois (oriented inpunt system gestisce i dispositivi di input)
SDL, OGG, Boost ( le versioni -dev libsdl libogg e libboost si trovano già pacchettizzate)
Noi compileremo Ogre, MyGUI Ois e StuntRally. Aggiungeremo altre librerie che sono risultate necessarie o utili (vedi cmake-gui), inutile ripetere poi che senza le build-essential non si va da nessuna parte.
Cosa dobbiamo avere quindi (Ubuntu 11.04 Natty Narvhal) ?
nota: alla luce di installazioni multiple mi baso sulla mia cronologia di apt e alcune librerie potrebbero non essere necessarie ma meglio non rischiare.
$ sudo apt get install build-essential cmake-qt-gui libsdl1.2-dev libogg-dev libboost-dev libmagic-dev libgif-dev libtool libzzip-dev libxaw7-dev libfreeimage-dev libopenexr-dev uuid-dev libboost-thread-dev libpoco-dev autoconf automake libfreetype6-dev libglu1-mesa-dev libglut3 libasound2-dev libavahi-client-dev libboost-thread-dev libcaca-dev libcurl3 libjpeg62-dev libncurses5-dev libpulse-dev libslang2-dev libvorbis-dev libxmu-dev libxpm-dev libxt-dev odbcinst unixodbc
Sono necessari i driver accelerati della vostra scheda video nel mio caso Nvidia con il pacchetto nvidia-cg-toolkit
Varie ed eventuali.. la mia situazione di partenza è diversa da quella di una Ubuntu vergine da compilazioni.
Organizziamoci 4 cartelle in cui disporremo OGRE MyGUI StuntRally ed Ois con cartella dei sorgenti e cartella dove andremo a compilare, io le ho chiamate ogrebuild, stablebuild, (stunt rally stable per differenziarlo dal trunk) myguibuild e ois singola cartella che non usa il cmake:
OGRE 1.7.3
Scarichiamo i sorgenti a questo indirizzo e scompattiamo la cartella ogre_src_v1-7-3.
Nota: in questa guida farò riferimento al mio posizionamento sulla Scrivania delle varie cartelle e i percorsi saranno relativi alla figura sopra.
Lanciamo da terminale cmake-gui, un tool grafico molto pratico per facilitare l’uso della compilazione tramite cmake e (lasciando l’opzione Use default native compilers) forniamogli i percorsi delle cartelle sorgenti e di compilazione (ogre_src_v1-7-3 ed ogrebuild) come in figura:
Clicchiamo su Configure per evidenziare eventuali problemi, valutiamo se ci manca qualche libreria e installiamola se necessario, ridiamo il Configire e poi clicchiamo su Generate.
Andiamo a compilare ed installare con:
$ cd ~/Scrivania/ogre/ogrebuild $ make $ sudo make install
Il make darà una progressione in percentuale e vi potrebbe richiedere librerie aggiuntive che andrete a reintegrare.
OIS 1.3:
Scarichiamo i sorgenti a questo indirizzo e scompattiamo la cartella ois-v1-3.
Clicchiamo col tasto destro del mouse sul file bootstrap>proprietà e nella scheda Permessi spuntiamo “Consentire l’esecuzione del file come programma”
Facendo sempre riferimento al mio posizionamento diamo i comandi:
$ cd ~/Scrivania/ois/ois-v1-3 $ ./bootstrap $ ./configure $ make $ sudo make install
Copiamo le librerie generate (si poteva automatizzarlo lo so..) nei luoghi di competenza:
$ cd /usr/local/lib $ sudo mv ~/Scrivania/ois/ois-v1-3/src/libOIS-1.3.0.so /usr/local/lib $ sudo mv ~/Scrivania/ois/ois-v1-3/src/libOIS.so /usr/local/lib $ sudo mv ~/Scrivania/ois/ois-v1-3/src/libOIS.a /usr/local/lib $ sudo mv ~/Scrivania/ois/ois-v1-3/src/libOIS.la /usr/local/lib $ cd /usr/local/lib $ sudo rm libOIS.la $ sudo ln -s libOIS.a /usr/local/lib/libOIS.la $ sudo updatedb
MyGUI 3.0.1:
Scarichiamo i sorgenti a questo indirizzo e scompattiamo la cartella MyGUI3.0.
Lanciamo da terminale cmake-gui e diamogli i percorsi della cartella dei sorgenti e di quella di compilazione (MyGUI3.0 e myguibuild), premiamo su Configure, spuntiamo in fondo la voce MYGUI_USE_FREETYPE (altrimenti avremo una interfaccia senza testo 😡 ) e forniamogli il percorso dei sorgenti di OGRE (variabile OGRE_DIR) come in figura:
Se abbiamo tutto il necessario diamo ancora Configure e Generate.
Compiliamo ed installiamo nel solito modo:
$ cd ~/Scrivania/mygui/myguibuild $ make $ sudo make install
Anche qui integriamo eventuali librerie mancanti in base al nostro output.
Bene.. l’obiettivo è vicino non ci resta che compilare il gioco vero e proprio 🙂
Il wiki ufficiale consiglia di procurarsi tramite git (apt-get install git) l’ultima versione trunk ma a me ha dato problemi nel caricare le auto e problemi grafici del tipo:
ERROR: Error loading model: /usr/local/share/games/stuntrally/cars/ES/wheel_rear.joe stuntrally: /home/fabrizio/Scrivania/stuntrally/source/vdrift/matrix3.h:128: MATRIX3MATRIX3 ::Invers e() const [with T = double]: asserzione "myfabs(Div) > EPSILON
C’è da dire che la versione trunk ha più auto disponibili e la possibilità di settare più giocatori.
Andiamo di Stable (1.1.1):
Non avendo l’automazione di git ci prepareremo a mano il necessario.
Sorgenti:
Scarichiamo i sorgenti e scompattiamoli sulla Scrivania (cartella StuntRally).
Dati:
Scarichiamo il pacchetto dati e scompattiamo solo la cartella data
dentro alla precedente cartella StuntRally (StuntRally/data).
Circuiti:
Scarichiamo i due pacchetti dei circuiti: Tracks Pack 1 e Tracks Pack 2 scompattiamo e copiamo i singoli circuiti in (StuntRally/data/tracks).
Nella sottocartella tracks con i singoli circuiti creiamo un file vuoto con il seguente codice e nominiamolo CMakeLists.txt:
cmake_minimum_required(VERSION 2.8) # Install tracks file(GLOB TRACKS "[^.]*") foreach(track ${TRACKS}) if(IS_DIRECTORY ${track}) install(DIRECTORY ${track} DESTINATION "${SHARE_INSTALL}/tracks") endif() endforeach()
Lanciamo per l’ennesima volta cmake-gui da terminale e forniamo la cartella dei sorgenti e quella di compilazione (nel mio caso StuntRally e stablebuild):
Quindi compiliamo ed installiamo:
$ cd ~/Scrivania/stuntstable/stablebuild $ make $ sudo make install
Volendo come ho fatto io possiamo crearci un deb usando il comando sudo checkinstall al posto di sudo make install (ci vuole il pacchetto checkinstall).
Se tutto è andato bene vedremo queste schermate:
.
A questo punto dovremo avere StuntRally installato in /usr/local/share/games e lo potremo avviare (insieme all’editor) sia con il comando stuntrally da terminale sia da Applicazioni>Giochi del menù di avvio di Gnome.
Ma non è finita qui…
Molto probabilmente anche voi andrete incontro al famigerato errore:
Loading library /RenderSystem_GL An exception has occured: OGRE EXCEPTION(7:InternalErrorException): Could not load dynamic library /usr/RenderSystem_GL.
Per tagliare la testa al toro scansionate il vostro sistema e assicuratevi di avere i file contenuti in /usr/local/lib/OGRE:
Plugin_BSPSceneManager.so Plugin_OctreeZone.so RenderSystem_GL.so Plugin_CgProgramManager.so Plugin_ParticleFX.so Plugin_OctreeSceneManager.so Plugin_PCZSceneManager.so
In:
/usr/lib64/OGRE/ (sistemi a 64 bit) /usr/lib/OGRE
Verificate che il vostro RenderSystem_GL.so non sia di pochi kb ma deve essere l’originale di 10 e passa Mb presente in /usr/local/lib/OGRE.
Video:
Video 1 Video 2
Screenshots:
[nggallery id=64].
Appendice solo per compilre su Debian Wheezy (testing):
Se durante la compilazione di MyGUI riscontrate l’errore:
[ 48%] Built target Plugin_StrangeButton Linking CXX executable ../../bin/Demo_Colour /usr/bin/ld: CMakeFiles/Demo_Colour.dir/__/__/Common/Base/Ogre/BaseManager.cpp.o: undefined reference to symbol 'typeinfo for Poco::SystemException' /usr/bin/ld: note: 'typeinfo for Poco::SystemException' is defined in DSO /usr/lib64/libPocoFoundation .so.9 so try adding it to the linker command line /usr/lib64/libPocoFoundation.so.9: could not read symbols: Invalid operation [*]
Nella cartella di comilazione aggiungete -lPocoFoundation al file link.txt della cartella .dir incriminata.
Nel caso sopra ad esempio (errore Demo_Colour) dovete modificare il file
….myguibuild/Demos/Demo_Colour/CMakeFiles/Demo_Colour.dir/link.txt
Se in OGRE avete invece:
Could not load dynamic library /RenderSystem_GL
Non tentate di spostare ovunque i vostri plugin e il file suddetto, l’unico modo è copiare tutti i plugin di OGRE e RenderSystem_GL.so dove li vuol lui, ovvero direttamente nella root /.
Se in OGRE avete l’errore:
./QOgreWidget_Demo: symbol lookup error: /usr/local/lib/OGRE/RenderSystem_GL.so: undefined sym bol: gluBuild2DMipmaps
Verificate di avere installato libglu1-mesa e libglut3, se non funziona rimuovete OGRE, date il configure >Generate con cmake-gui e in
../Ogre/build/RenderSystems/GL/CMakeFiles/RenderSystem_GL.dir/link.txt
aggiungete il parametro -lGLU dopodichè ricompilate OGRE e reinstallate.
knap says
In Kubuntu 11.10
Mi da errori in Compilazione della release di Stunt Rally 1.4.
Con la release SR 1.3 sono riuscito a compilare solo il gioco che da terminale mi da errori:
Plugin successfully installed
Loading library /usr/lib/OGRE/Plugin_CgProgramManager
An exception has occured: OGRE EXCEPTION(7:InternalErrorException): Could not load dynamic library /usr/lib/OGRE/Plugin_CgProgramManager. System Error: /usr/lib/OGRE/Plugin_CgProgramManager.so: cannot open shared object file: No such file or directory in DynLib::load at /home/knap/Ogre/OgreMain/src/OgreDynLib.cpp (line 91)
*-*-* OGRE Shutdown
Il problema che non ha compilato Plugin_CgProgramManager e quindi nella cartella OGRE non c’e’ …
Mi sapresti aiutare o perdo tempo a compilarlo sulla 11.10 ?
fabrixx says
Che versione di Ogre hai compilato?
Anche a me tenta StuntRally 1.4, l’ho notato solo ora.
Lo puoi compilare benissimo anche sulla 11.10 ma magari rimuovi prima la versione precedente se provi con la 1.4