Kompilieren (Linux)

Aus PantheonWiki


TODO: Bitte mal einer der Linuxfüchse die Anleitungen zusammenfassen und eine generische Anleitung mit distributionsspezifischen Anmerkungen daraus machen anstatt einzelne, redundante Artikel zu pflegen.

Inhaltsverzeichnis

Allgemeines

Aufgrund der Vielzahl an Linuxdistributionen, die es gibt, ist es uns unmöglich für jede dieser Distributionen eine Anleitung bereitzustellen, die man Schritt-für-Schritt abarbeiten kann. Daher zeigen wir hier die Schritte, die nötig sind um Rastullahs Lockenpracht samt seiner Abhängigkeiten aus den Quelltextpaketen zu kompilieren. Zudem sind momentan Anleitungen für Gentoo und Debian/Ubuntu Linux verfügbar.

Soweit nicht anders angegeben, sollte die Installationsphase immer als Benutzer root stattfinden. Wie Sie zum Benutzer root wechseln, entnehmen Sie bitte der Hilfe Ihrer verwendeten Distribution.

Nicht erwähnte Abhängigkeiten

Rastullahs Lockenpracht benötigt folgende Pakete, für die nicht näher erklärt wird, wie man sie kompiliert. Dies sind die Ruby Skriptsprache, der Apache Xerces XML Parser sowie die Boost C++ Bibliotheken (in der Version 1.34 oder höher). Sollte Ihre Distribution diese Pakete nicht von sich aus bereitstellen, dann ziehen Sie bitte die diveresen Hilfedateien in den Paketen oder auf deren Webseiten zu Rate.

Außerdem werden folgende Pakete benötigt, die nicht bei jeder Distribution von Anfang an installiert sind: pcre http://www.pcre.org/, libxaw-headers, libtool, autoconf, automake

FreeImage

FreeImage stellt die Funktionalität zum Laden von Bildformaten, wie PNG, BMP, JPEG, TIFF, bereit. Sie wird in CEGUI und Ogre3D eingesetzt.

Herunterladen

wget http://prdownloads.sourceforge.net/freeimage/FreeImage3110.zip
unzip FreeImage3110.zip
cd FreeImage

Kompilieren

make

Installieren

make install

CEGUI

CEGUI stellt eine Fensterverwaltung und grafische Steuerelemente für Grafikengines zur Verfügung, die diese Funktionalität von sich aus nicht mitbringen. Die Bibliothek ist speziell auf die Bedürfnisse von Spieleprogrammierern abgestimmt.

Herunterladen

wget http://prdownloads.sourceforge.net/crayzedsgui/CEGUI-0.6.2b.tar.gz
tar xfz CEGUI-0.6.2b.tar.gz
cd CEGUI-0.6.2

Kompilieren

./bootstrap
./configure --disable-samples
make

Installieren

make install

OIS

Das Object Orientated Input System stellt eine Schnittstelle zur Verfügung, um unterschiedliche Eingabegeräte, wie Tastatur, Maus oder Joystick, anzusprechen.

Herunterladen

wget http://prdownloads.sourceforge.net/wgois/ois_1.2.0.tar.gz
tar xfz ois_1.2.0.tar.gz
cd ois

Kompilieren

./bootstrap
./configure
make

Installieren

make install

Cg

Das Cg Toolkit stellt Compiler sowie Laufzeitbibliotheken für die Programmiersprache C for graphics bereit.

Herunterladen 32 bit

wget http://developer.download.nvidia.com/cg/Cg_1.5/1.5.0/Cg-1.5_x86.tar.gz

Installieren 32 bit

tar xfz Cg-1.5_x86.tar.gz -C /

Herunterladen 64 bit

http://developer.download.nvidia.com/cg/Cg_2.0/2.1.0016/Cg-2.1_November2008_x86_64.tgz

Installieren 32 bit

tar xfz Cg-2.1_November2008_x86_64.tgz -C /

OGRE

Die Object-Oriented Graphics Rendering Engine ist eine Szenen orientierte, flexible 3D Engine, die es dem Entwickler leichter machen soll, Anwendungen zu schreiben, die Hardware beschleunigte 3D Grafik verwenden. OGRE ist jedoch nicht speziell für Spiele geschrieben worden, so dass Dinge wie Sound, Kollision, Physik oder Steuerung von weiteren Bibliotheken bereit gestellt werden müssen.

Herunterladen

wget http://downloads.sourceforge.net/ogre/ogre-v1-6-1.tar.bz2
tar xfj ogre-v1-6-1.tar.bz2
cd ogre

Kompilieren

./configure
make

Installieren

make install

FMOD EX

Anmerkung: FMOD EX ist keine OpenSource Bibliothek.

Herunterladen 32bit

wget http://www.fmod.org/index.php/release/version/fmodapi42208linux.tar.gz
tar xfz fmodapi42208linux.tar.gz

Herunterladen 64bit

wget http://www.fmod.org/index.php/release/version/fmodapi42208linux64.tar.gz
tar xzf fmodapi42208linux64.tar.gz

Installieren

cd fmodapi42208linux
make install

Newton

Newton Game Dynamics ist eine Bibliothek um eine Echtzeitphysikumgebung zu simulieren. Geboten werden unter anderem Kollisonserkennung und -behandlung, Szenenverwaltung, sowie dynamisches Verhalten.

Anmerkung: Newton ist keine OpenSource Bibliothek.

Herunterladen 32bit

wget http://www.newtondynamics.com/downloads/newtonLinux-32-2.00.tar.gz
tar xzf newtonLinux-32-2.00.tar.gz

Herunterladen 64bit

wget http://www.newtondynamics.com/downloads/newtonLinux-64-2.00.tar.gz
tar xzf newtonLinux-64-2.00.tar.gz

Installieren

cd newtonSDK
install --mode 644 --owner root --group root sdk/Newton.h /usr/local/include/
install --mode 755 --owner root --group root sdk/libNewton.so /usr/local/lib/libNewton.so.2.0.0
ln -sfv libNewton.so.2.0.0 /usr/local/lib/libNewton.so.2
ln -sfv libNewton.so.2.0.0 /usr/local/lib/libNewton.so

OgreNewt

OgreNewt stellt die Funktionen der Newton Bibliothek für OGRE bereit.

Herunterladen

svn co http://svn.berlios.de/svnroot/repos/dsa-hl/dependencies/OgreNewt
cd OgreNewt

Kompilieren

cmake .
make

Installieren

make install

SWIG

Der Simplified Wrapper and Interface Generator verbindet Programme, die in C/C++ geschrieben sind mit einer Reihe von Hochsprachen (Perl, PHP, Python, Tcl, Ruby and PHP). Es werden Sprachanbindungen erzeugt, so dass bestimmte C/C++ Funktionalität von diesen Sprachen aus verwendet werden kann.

Da Swig dazu verwendet wird, die Ruby-Anbindung zu Rastullahs Lockenpracht herzustellen, sollte darauf geachtet werden, daß Ruby samt der Headerfiles (diese liegen z.B. in den dev-Paketen diverser Distributionen) installiert ist.

Herunterladen

wget http://prdownloads.sourceforge.net/swig/swig-1.3.31.tar.gz
wget http://users.team-pantheon.de/chrber/swig-1.3.31-ruby-rastullah-1.patch
tar xfz swig-1.3.31.tar.gz

Kompilieren

cd swig-1.3.31
patch -Np1 -i ../swig-1.3.31-ruby-rastullah-1.patch
./configure
make

Installieren

make install

meshmagick

Meshmagick ist ein Ogre-Addon von haffax, das verschiedene Operationen auf Ogre-Meshes ausführt.

Herunterladen

svn co https://ogreaddons.svn.sourceforge.net/svnroot/ogreaddons/trunk/meshmagick

Kompilieren

cd meshmagick
cmake .
make

Installieren

make install

Rastullahs Lockenpracht

Herunterladen

svn co http://svn.berlios.de/svnroot/repos/dsa-hl/rl/trunk rl
cd rl

Kompilieren

cmake .
make

Installieren

make install

Module

In diesem Paket sind alle Spieldaten (Grafiken, Sounddateien, 3D-Objekte, Scripte) für Rastullahs Lockenpracht vorhanden.

Herunterladen

svn co http://svn.berlios.de/svnroot/repos/dsa-hl/modules

Installieren

svn export modules Modulverzeichnis

Das Modulverzeichnis kann aus der Zusammenfassung von configure und/oder aus der Datei /etc/rastullah/rastullah.conf entnommen werden.

Alternativ kann man das modulverzeichnis auch lokal in seinem home-folder lagern, um leichter Änderungen vornehmen zu können:

cd && mkdir .rastullah # Nur falls noch nicht vorhanden
cd .rastullah
svn co http://svn.berlios.de/svnroot/repos/dsa-hl/modules modules
sudo ln -s /home/Benutzername/.rastullah/modules/ Modulverzeichnis

Wobei Benutzername (offensichtlich) durch den Benutzernamen zu ersetzen ist, für 'Modulverzeichnis' siehe 5 Zeilen über dieser. In den meisten fällen ist dies '/usr/local/share/rastullah' Konfiguration

In der rastullah.conf (zu finden in /etc/rastullah oder in ~/.rastullah) können verschiedene Pfade geändert werden, wenn sie nicht den Standardwerten entsprechen.

Dazu im Abschnitt [Paths] (wenn er nicht vorhanden ist, dann anlegen) folgende Einträge ändern bzw. anlegen:

  • LogDirectory - das Verzeichnis, in dem die Logdateien von RL, Ogre und CEGUI angelegt werden
  • ModulesDirectory - das Verzeichnis, in dem die RL-Module liegen
  • OgrePluginDirectory - das Verzeichnis, in dem die Ogre-Plugins liegen

Starten

Falls Sie RL mit einem anderen Prefix als Ruby installiert haben, müssen Sie vor dem Start noch die Umgebungsvariable RUBYLIB setzen. Tragen dazu am besten die Zeile export RUBYLIB=/usr/local/lib in die Datei .bashrc ein. Danach können Sie das Spiel mit

rastullah

starten. Meldet rastullah Fehler wegen nicht auffindbaren Dateien/libs müssen Sie 'ldconfig' als root ausführen.

Troubleshooting

Absturz beim Starten

Bei dem OSS Treiber von Ati kann es vorkommen, dass Rastullahs Lockenpracht beim Starten abstürzt. Mit dem fglrx Treiber sollte Rastullahs Lockenpracht fehlerfrei laufen.

Anhang

Hier finden Sie nützliche Tipps, wie Sie sich das Kompilieren generell erleichtern können. Die erwähnten Programme können natürlich auch dazu verwendet werden, um die Zeit, die man generel für das Kompilieren von Anwendungen benötigt, herabzusetzen.

CCache

CCache speichert die vom Compiler erzeugten Objektdateien und kann sie bei einer Neukompilation (z.b. make clean; make) wiederholen. Die Homepage von CCache ist hier. Dort findet man auch die Beschreibung einer zweiten Methode, die hier nicht diskutiert wird.

Benutzung

Da die Benutzung von CCache das Setzen von Environment-Variablen voraussetzt, müssen sie jeweils vor dem Aufruf von configure gesetzt werden, denn dieses schreibt die auf dem System gefundenen Compiler fest in die Makefile-Dateien. Wenn man CCache nicht benutzen will, dann löscht man die entsprechenden Umgebungsvariablen einfach wieder (oder andere Shell benutzen) und führt dann configure aus.

Man teilt normalerweise configure über die Umgebungsvariablen 'CC' und 'CXX', welchen C- resp. C++-Compiler man benutzen möchte. Wenn nichts gesetzt wird, benutzt configure meistens gcc bzw. g++.

Damit CCache funktioniert muss man jetzt die Umgebungsvariablen so setzen, dass ccache zusätzlich zum Compiler aufgerufen wird, dies braucht man nur beim ersten aufruf von cmake. Es muss sich aber auf jeden fall um den ersten Aufruf handeln, sonst ignoriert cmake den so neu gesetzten Compiler!

 CXX="ccache g++" cmake .

Danach werden beim ersten Lauf die Kompilate in den Cache geschrieben, von wo sie bei weiteren Kompilationen geholt werden.

DistCC

DistCC erlaubt es, einen oder mehrere Computer mit der Kompilation zubetrauen (Stichwort: Compilefarm)

Benutzung

Falls man nur distcc ohne ccache benutzen möchte, muss man für den ERSTEN cmake-Aufruf CXX auf "distcc" setzen. Der distccd-daemon muss auf dem Remote-PC mittels

distccd --daemon --allow <ip-des-client-pcs>

gestartet werden. Alternativ kann man den Daemon natürlich seiner Distribution entsprechend automatisch starten lassen und die Konfigurationsdateien benutzen oder den distccd in inetd einbauen...

Zusätzlich müssen dem distcc-Client die möglichen Server mitgeteilt werden:

export DISTCC_HOSTS="<pi-des-servers> <weiterer-server> localhost"

Der Eintrag 'localhost' bewirkt, dass auch auf dem eigenen Rechner compiliert wird. Falls viele distccd-Server zur Verfügung stehen, ist die Performance eventuell besser, wenn dieser Eintrag weggelassen wird, da der eigene PC schon den Teil des Präprozessors übernehmen muss. Die Server werden in der Reihenfolge verwendet, in der sie in der Liste auftauchen, folglich sollte diese nach Geschwindigkeit sortiert werden. Falls kein Server funktioniert wird auf dem lokalen PC kompiliert.

Zu beachten ist außerdem, dass make mit der Option -j<Anzahl> aufgerufen werden muss, wenn mehrere Kompilieraufrufe gleichzeitig gestartet werden sollen. Die Anzahl sollte für die beste Performance vermutlich (mindestens) der Anzahl der beteiligten Rechner entsprechen.

z.B.: make -j3

CCache und DistCC

Zur gleichzeitigen Verwendung von ccache und distcc muss noch etwas anders vorgegangen werden:


Es sind die selben Schritte wie zur Verwendung von CCache notwendig (siehe oben). Als einziger neuer Schritt muss die Umgebungsvariable CCACHE_PREFIX verändert werden:

export CCACHE_PREFIX="distcc"

Die Daemonen auf den Server-Rechnern werden entsprechend der Anleitung für DistCC gestartet. Die Umgebungsvariable DISTCC_HOSTS muss ebenfalls gesetzt werden.

Debugging

Wenn man Debuggen möchte, sollte man RL nicht installieren und stattdessen die Umgebungsvariablen LD_LIBRARY_PATH und RUBYLIB setzen. Folgendes Skript hilft dabei:

#!/bin/sh
export RL=<Pfad zu den Sourcen>
export LD_LIBRARY_PATH=${RL}/engine/common/src/.libs:${RL}/engine/core/src/.libs:${RL}/engine/dialog/src/.libs:${RL}/engine/rules/src/.libs:${RL}/engine/ai/src/.libs:${RL}/engine//script/src/.libs:${RL}/engine/ui/src/.libs:${RL}/engine/uicomponents/src/.libs:${RL}/plugins/fmod4driver/src/.libs
export RUBYLIB=${LD_LIBRARY_PATH}
gdb ${RL}/engine/startup/src/.libs/rastullah --module ruchin

Will man in einer IDE debuggen, muss man die entsprechenden Umgebungsvariablen dort setzen.

Persönliche Werkzeuge
Link zur berliOS-Projektseite