Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

1

27.12.2008, 19:43

[HowTo] Boost einrichten

Inhalt
1. Einleitung
1.1. Links
2. BJam Kompilieren
3. Boost vorbereiten
4. Einrichten von Visual Studio
5. Die Testanwendung
6. Mitwirkende


1. Einleitung
Man hört es, man sucht es, man läds es runter, man versucht es einzubauen und schmeisst es wieder weg. Boost. Für alle die es nicht kennen: Boost ist eine Sammlung von Bibliotheken, manche davon sind im nächsten C++ Standard enthalten. Mit Boost kann man allerlei sachen machen, unter jedem System. Leider ist die Einrichtung von Boost nicht gerade Komfortabel, was auch mich einst dazu bewegt hat, aufzugeben und boost nicht zu benutzen. Ich werde in diesem Artikel beschreiben, wie man Boost mit Hilfe von BJam Kompiliert und in VC09 Express (ich denke, das ist die meistverwendete IDE, alternativ kann ich auch 05 Std anbieten) einrichtet. EIns noch vorneweg: Der Weg mit BJam ist nicht unbedingt der einfachste. Es gibt Installer für Boost, die erledigen diese Arbeit automatisch. Der Nachteil: Die gibts nur für Windows und sie sind nicht immer in der neuesten Version. Es kann also nicht schaden, sich das hier schnell durchzulesen, es ist wirklich nicht kompliziert. Wer sich dennoch für die Installer interessiert, ein Link kommt weiter unten.

1.1. Links
Bevor es los geht, noch einige Links, wo man Boost und BJam herbekommt (als Alternative kann man auch Google bemühen ;-))

Boost Download
Boost Jam (BJam) Download
Boost Installer (Achtung, nicht die neueste version verfügbar!)
Einrichtung des MingW Compilers für die automatische Kompilererkennung

Am besten nehmt ihr beide male das Zip-Archiv, das sollte am einfachsten gehen.


2. BJam Kompilieren
Entpackt zuerst BJam und wechselt in das entpackte Verzeichnis. Hier gibt es eine Datei build.bat - führt diese aus. Daraufhin wird BJam kompiliert, keine Sorge, es dauert nur ein paar Sekunden. Die entsprechende exe findet ihr im Ordner bin.ntx86. Unter Linux müsst ihr mit dem Befehl "sh ./build.sh" BJam erstellen. Fragt mich aber nicht, wo dann die ausführbare Datei landet.

Solltet ihr spezielle wünsche haben, mit welchem Compiler euer BJam erstellt wird oder sollte die Automatische Erkennung Probleme bereiten, gibt es die Möglichkeit, dies selber festzulegen. Solltet ihr bereits eine exe haben, ist es völlig ausreichend, diese zu verwenden und ihr könnt mit dem nächsten Abschnitt weiter machen.
Alle anderen müssen jetzt schonmal das cmd aufmachen und ins bjam verzeichnis wechseln (da wo die build.bat rumfliegt). Für eine Liste der unterstüzten Compiler und der weiteren Buildmöglichkeiten wechselt in den Ordner jam und öffnet die Datei building.html. Besorgt euch einen dieser Kompiler, sonst hilft euch dieser Artikel nicht weiter. Die build.bat erkennt automatisch, welchen Compiler ihr habt und benutzt i.d.r. den neuesten. Bei mir also Visual C++ 2008. Um die automatische Erkennung zu umgehen, reicht es, einen Parameter an die build.bat anzuhängen:

Quellcode

1
build.bat <compilerkürzel>


In der building.html erfahrt ihr, wie die entsprechenden Kürzel lauten, ich Liste mal die wichtigsten auf:

Quellcode

1
2
3
4
5
msvc - Visual C++ 6
vc7 - Visual C++ 2003
vc8 - Visual C++ 2005
vc9 - Visual C++ 2009
gcc - GNU gcc


Führt einfach die build.bat mit dem entsprechenden Parameter aus, z.b.:

Quellcode

1
2
build.bat vc7 // Kompiliert mit Visual C++ 2003
build.bat vc9 // Kompiliert mit Visual C++ 2008


In der Regel wird die Release Variante kompiliert, ihr könnt das umgehen, indem ihr --debug an die Komandozeile anhängt. Wie gesagt, es ist nicht erforderlich, daran etwas zu verändern, es sei denn, die automatische Erkennung macht Probleme. (Hey, es ist nur das BUILDTOOL^^)


3. Boost vorbereiten
Jetzt komen wir zu dem wirklich wichtigen Teil.
Entpackt nun das Boost-Archiv. Holt euch die bjam.exe (die habt ihr ja vorher erstellt) und kopiert sie in euer entpacktes Boost. Nun öffnet die Konsole (Start->Ausführen->"cmd") und wechselt in das Verzeichnis, wo Boost liegt (mit dem Befehl cd).

Zuerst müsst ihr mal wissen, mit welchem Compiler ihr boost verwenden wollt. Für mich kommen zwei in Frage: Visual C++ 2008 und Visual C++ 2005 (Ob ihr express oder nicht habt, spielt keine Rolle). Dann müsst ihr wissen, ob ihr Debug oder Release braucht. Am besten nehmt ihr beides. Dll oder lib? Ich bevorzuge dll. Multithreaded oder nicht? Lasst davon besser die Finger und nehmt multithreaded.

So wir müssen nun bjam (aus der Konsole) anweisen, diesen ganzen Kram auch zu verwenden. Die Syntax sieht wie folgt aus:

Quellcode

1
bjam toolset=<compiler> variant=<debug/release> threading=<multi> link=<shared/static> [--with-<lib> --without-<lib>]

Der Parameter toolset gibt den Compiler an. Mir ist folgendes Bekannt:

Quellcode

1
2
3
4
msvc-7.1
msvc-8.0
msvc-9.0
msvc-9.0express


Bei meiner Visual Studio 2008 Express Edition hat msvc-9.0 problemlos funktioniert. Ich habe jedoch gehört, dass manche Leute msvc-9.0express angeben mussten. Sollte also irgend etwas nicht funktionieren, versucht, noch das "express" dahinter zu hängen.

variant Gibt an, ob debug oder release Kompiliert werden soll.
Von threading lasst besser die Finger, multithreaded ist die beste Einstellung und ich wüsste keinen Grund, eine andere zu verwenden.
link gibt an, ob eine Dll erstellt werden soll oder alles in die exe reingelinkt wird. Da ich mit der Dll Version Probleme hatte, empfehle ich die Statische Lib-Linkung. shared Erstellt Dlls + libs, static erstellt statische libs.
--with- Kompiliert zusätzlich die angegebene Boost Library. --with-filesystem würde z.B. noch das Filesystem hinzufügen.
--without- Die angegebene Lib wird nicht mitkompiliert.
Wird kein --with- angegeben, werden automatisch alle Libs kompiliert. Weenn with angegeben wird, wird nur die ausgewählte lib erstellt.

Um zum Beispiel die Debug und Release dlls mit Visual C++ 2008 zu erstellen gebt folgendes in die Konsole ein:

Quellcode

1
bjam toolset=msvc-9.0 variant=debug variant=release threading=multi link=static


Wenn man zum Beispiel nur das Threading System erstellen will, erweitert man die beiden Zeilen einfach noch um folgendes --with-thread, das sähe dann so aus:

Quellcode

1
bjam toolset=msvc-9.0 variant=debug variant=release threading=multi link=static --with-thread

Dauert ein paar Sekunden.

Es kann durchaus sinnvoll sein, das ganze in einer Batch-Datei zu speichern, wenn z.b. eine neue Version von boost rauskommt muss man diese einfach nur noch ausführen. In meinem Fall sähe das so aus:
build.cmd

Quellcode

1
2
3
4
5
6
7
8
9
@echo off
echo Building with vc9...
bjam toolset=msvc-9.0 variant=debug variant=release threading=multi link=static


echo Building with vc8...
bjam toolset=msvc-8.0 variant=debug variant=release threading=multi link=static

pause

(Ms-Batch ist keine Kunst, jeder kann das lernen^^)

Wer einfach alles erstellen will, kann auch folgendes machen:

Quellcode

1
bjam --build-type=complete

Dass das sehr lange dauert, brauche ich ja wohl nicht zu erwähnen.
Am effizientesten ist es, wenn man entweder nur die Lib erstellt, die man auch wirklich grade benötigt, oder man erstellt alle sinnvollen (also z.B. alle static debugs und releases), wenn man mal grade Essen geht. Wirklich alle zu erstellen macht keinen Sinn. Mein Vorschlag: Einfach erstmal drauf los coden. Beim Linken meckert der Compiler dann sofort, wenn ihm ne lib zum Linken felht. Der entsprechende Komponentenname ist im Dateiname enthalten. Erstellt die fehlenden Dateien dann einfach schnell mit dem --with-Parameter.


4. Einrichten von Visual Studio
Kommen wir dazu, wie man Visual Studio sagt, wo es boost finden kann.
Wie bekannt sein sollte brauchen wir einen Ordner, wo die Libs drin sind und einen für die Includes.

4.1. Die Libs vorbereiten
Zuerst müssen wir den Lib-Ordner vorbereiten. Geht dazu in den Unterordner <boost>\bin.v2, diesen werden wir später in VS eintragen. Alle Libs (und eventuell Dlls) sind hier in den Unterordnern verteilt. Wir müssen sie nun da raus holen und in den bin.v2 Ordner kopieren, damit VS ihn findet. am besten in den bin.v2 Ordner kopieren. Diesen geben wir dann VS bekannt (beschreibe ich weiter unten nochmal).
Dazu sind mir spontan zwei Möglichkeiten eingefallen:

1) Als Testanwendung zu diesem Artikel habe ich ein kleines Programm geschrieben was die Aufgabe automatisch erledigt. Der Link ist weiter unten in der Section "Die Testanwendung".
1.1) Entpackt das Archiv und kopiert die exe (am besten die ohne D am Ende, das wäre nämlich die Debug Version) in euren bin.v2 Ordner.
1.2) Wenn das Ausführen nicht funktioniert, kopiert noch die Ordner mit den Runtime Libs dazu.
1.3) Exe Ausführen...

Wenn alles geklappt hat, habt ihr jetzt alle .lib und .dll Dateien in eurem bin.v2 Ordner.
Das ganze könnt ihr übrigens jederzeit wiederholen, wenn ihr z.B. eine weitere Komponente kompiliert habt oder etwa boost aktualisiert habt. Der Trick bei der Sache: Die Anwendung benutzt das boost-Filesystem für die nötigen Operationen. Um sie zu kompilieren müsst ihr mindestens die Komponenten filesystem und system in der Statischen Variante kompiliert haben und die entsprechenden Libs sollten sich in eurem bin.v2 oder einem anderen Ordner, den der Compiler kennt, befinden ;-)

2) Etwas komplizierter:
2.1) Startet die explorer suche (Strg+F).
2.2) Gebt bei Dateiname "*.lib" ein und startet die Suche.
2.3) Wenn die Suche beendet ist, markiert alle Ergebnisse (Strg+A) und kopiert diese (Strg+C).
2.4) Geht nun wieder in den bin.v2 Ordner und fügt die Dateien dort ein (Strg+V). Ihr werdet ein paar mal gefragt, ob ihr eine Datei überschreiben wollt, wählt jedes mal ja.
2.5) Wenn ihr die dll Versionen erstellt habt, wiederholt (nicht etwa nur die Dlls kopieren) die Schritte 2-4 nur diesmal gebt ihr bei Suche "*.dll" ein.

Nun haben wir alle libs (und eventuell auch die dlls) in einem Verzeichnis.

4.2. Libs in Visual Studio bekanntgeben
Öffnet Visual Studio. Geht oben auf Extras->Optionen. Es öffnet sich ein neues Fenster. Im Tree links geht zu Projekte und Projektmappen->VC++ Verzeichnisse. Bei Verzeichnisse anzeigen für wählt Bibliotheksdateien aus. Fügt hier euer bin.v2 Verzeichnis ein. Nun wählt noch Includedateien aus. Hier gebt ihr euer Boost Verzeichnis an. Das wars.


5. Die Testanwendung
Nun muss nur noch alles getestet werden. Als Testanwendung habe ich mir folgendes ausgedacht: Wie oben bereits erwähnt, ist es ein Programm, was alle libs + dlls aus dem Unterverzeichniss "bin.v2/libs" nach "bin.v2" kopiert. Das ganze Verwendet boost::filesystem. Ich werde den Quellcode hier nicht hinschreiben, oder erklären, da es nur eine Testanwendung ist. Hier der Downloadlink zum gesamten Archiv:

ZIP-Archiv
RAR-Archiv (bessere Kompression)

Enthalten ist folgendes:
- Der Text dieser Artikels/Tutorials
- Quellcode zur Testanwendung
- VC 2008 Projekt und Projektmappe
- Vorkompilierte exe zur Debug und Release Version

Falls ihr unbedingt darauf besteht, die Dll zu verwenden (wie gesagt, ich hatte damit Runtimeprobleme), müsst ihr vor den Boost includes noch folgendes haben:

C-/C++-Quelltext

1
2
#define BOOST_ALL_DYN_LINK
#define BOOST_LIB_DIAGNOSTIC



6. Mitwirkende
Danke an alle die mir hierbei geholfen haben.
CodingCat, Danke für den CodeProject-Link
mirlix, Danke für die Unterstützung und deine Bemühungen
drakon, Danke, dass du mich auf die Installer aufmerksam gemacht hast
unsigned long, Danke für den Link zu den Installern
Das Gurke, Danke, dass du kurz erklärt hast, wie man MingW richtig einrichtet

mfg,

Faule Socke

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

27.12.2008, 19:59

Finde es gut, dass du das mal machst. Grundsätzlich reicht aber ja die Anleitung auf boost.org. Aber zugegeben es ist nicht ganz so komfortabel..:)

btw:
Für Windows gibt es ja auch die Installer, die das ganze so einfach machen, wie sonst etwas installieren. Das einzige, was man noch machen muss, ist dann die libs linken und include Pfad einstellen. Ist für den Anfang sicher einfach, als die ganze lib zu kompilieren. (der Installer ist allerdings nicht immer in der neusten Version erhältlich..)

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

3

27.12.2008, 20:40

Hast du eventuell einen Link zu den Installern? dann kommt der auch noch mit rein.

Socke

// Edit: Ja die offiziellen Anleitungen haben mir aber alle nicht so wirklich zugesagt. Ich muss zugeben, dass ich es erst auf die Reihe bekommen habe, als ich den Artikel auf CodeProject gelesen habe und mir davor alles mögliche aus der BJam doku durchgelesen hab.

Socke

Anonymous

unregistriert

4

27.12.2008, 22:50

http://www.boostpro.com/products/free :)

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

5

01.01.2009, 22:15

OK, ich bin soweit fertig. Meint ihr, das geht als Tutorial durch?

Socke

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

6

01.01.2009, 22:27

Sieht soweit gut aus. Bei 4. könntest du das ganze noch ein wenig schöner gestalten. (Sieht ein wenig zusammengepflastert aus).

Inhaltlich habe ich jetzt keine Lust boost nochmal zu installieren, aber das nächste mal werde ich wohl einmal nach deiner Anleitung gehen. :) (pingelig genau ;))

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

7

01.01.2009, 23:05

OK drakon, es ist vollbracht.

Socke

No-Name

Frischling

Beiträge: 1

Wohnort: Schweiz Kanton Bern

Beruf: Lernender Informatiker

  • Private Nachricht senden

8

02.01.2009, 18:34

Ich habe soeben gemerkt das man für die Visual Studio 2008 Express Edition
msvc-9.0express
angeben muss und nicht msvc-9.0.
Vieleicht sollte man das noch hinzufügen.

No Name

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

9

02.01.2009, 23:14

Also ich habe es mit vc9 express mit dem normalen msvc-9.0 hinbekommen, aber ich werds noch reinschreiben

PS: Eventuell kann das ja ein Mod in die Tutorial oder FAQ oder whatever section verschieben? Da wo es halt am besten hinpasst?

Socke

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

10

04.01.2009, 13:08

Kein Plan ob das gewünscht ist: Ich hab gerade kurz beschrieben wie man das gcc (mingw) Toolset unter Windows "einrichtet". Naja, eigentlich nur wie man die PATH Variable ergänzen muss *g*

Gehört zwar nicht direkt dazu, aber ich wollts erwähnt haben.

Werbeanzeige