====== Boost ======
===== Allgemeines =====
Auf der Suche nach einer plattformunabhängigen Lösung für diverse Probleme (z.B. Nutzung der seriellen Schnittstelle)
bin ich bald auf Boost gestoßen.
Boost ist (theoretisch) plattformunabhängig und hat für die meisten Probleme, mit denen man als C++-Nutzer konfrontiert werden
könnte, eine Lösung. So gibt es Libraries für Threading, IO, Speicherverwaltung, Algorithmen uvm. Boost versucht dabei, durch einen
aufwendigen Prüfungsprozess eine hohe Qualität der einzelnen Teile zu gewährleisten. Deshalb und auch wegen seiner sehr permissiven
Lizenz ist es weit verbreitet und wird zum Teil auch in C++-Standards aufgenommen (z.B. C++11).
Wie ich feststellen musste, ist die Dokumentation von Boost leider etwas schlecht was Verlinkung und ausführliche Erklärung angeht,
sodass man einiges (mit Glück) erst findet, wenn man ein bisschen in einschlägigen Foren und Newsgroups sucht.
===== Installation =====
Nutzt man Boost unter Linux, so ist das meist nicht besonders schwierig, da wohl die meisten Distributionen entsprechende Pakete
bereitstellen. Unter Windows funktioniert es auch - solange man MSVC verwendet. Leute wie ich - die, wo möglich, OSS einsetzen wollen -
nutzen jedoch kein MSVC sondern MinGW - und da fangen die Probleme an. Installer sucht man mehr oder weniger erfolglos und wenn
man sie findet, funktionieren sie häufig mit neuen Versionen von MinGW nicht mehr. Die einzige Lösung bleibt, Boost selbst zu kompilieren.
Das ist zwar nicht immer nötig, da große Teile von Boost Header-Only sind und deshalb ein einfaches kopieren reicht. Trotzdem empfehle ich,
alles zu kompilieren.
Das Vorgehen unter Windows/MinGW ist dann folgendermaßen:
Im Folgenden sollte auf jeden Fall cmd und nicht MSys oder ähnliches verwendet werden. Falls man unter Windows Vista oder 7 arbeitet,
sollte man cmd als Admin starten.
Der Binary-Ordner von MinGW sollte in Path eingetragen sein. Das lässt sich einfach testen: cmd ausführen und ''g++ --version'' eingeben.
Dann sollte etwas ähnliches rauskommen:
g++.exe (GCC) 4.6.2\\
Copyright (C) 2011 Free Software Foundation, Inc.\\
This is free software; see the source for copying conditions. There is NO\\
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- Download Boost: http://www.boost.org/users/download/
- Extrahieren und cmd in entsprechenden Verzeichnis starten
- Ausführen: bootstrap.bat gcc
- Ausführen: b2 install toolset=gcc --build-type=complete (das kann je nach Rechner mehrere Stunden dauern!)
Wenn das alles (hoffentlich fehlerfrei) durchgelaufen ist, existieren im Boost-Verzeichnis die Ordner //include// und //lib//.
Zur Benennung der einzelnen Bibliotheken in lib gibt http://www.boost.org/doc/libs/1_48_0/more/getting_started/windows.html#library-naming aufschluss.
===== Nutzung =====
Möchte man nun mit Boost kompilieren und hat z.b. Boost 1.48 in c:\boost installiert, so muss der Compileraufruf etwa so aussehen
(z.B. für die multithreaded Version der Libs):
\\ cmd:\\
''g++ myfiles.cpp -lsomething -lsomeboostlib-mt-1_48 -L c:\boost\lib -I c:\boost\include\boost-1_48 -o myboostapp.exe''
\\ bzw. für Msys:\\
''g++ myfiles.cpp -lsomething -lsomeboostlib-mt-1_48 -Lc/boost/lib -Ic/boost/include/boost-1_48 -o myboostapp.exe''
Unter Windows müssen häufig noch andere Libs hinzugelinkt werden, das muss dann anhand der Fehlermeldung entschieden werden. Z.B.
benötigt die Serielle Kommunikation via Boost.ASIO noch ein -lwsock32, um folgende Fehler zu vermeiden:\\
''...\AppData\Local\Temp\cc2kpzUp.o:main.cpp:(.text$_ZN5boost4asio6detail17winsock_init_base7startupERNS2_4dataEhh[boost::asio::detail::winsock_in
base::startup(boost::asio::detail::winsock_init_base::data&, unsigned char, unsigned char)]+0x57): undefined reference to `WSAStartup@8'\\
...\AppData\Local\Temp\cc2kpzUp.o:main.cpp:(.text$_ZN5boost4asio6detail17winsock_init_base7cleanupERNS2_4dataE[boost::asio::detail::winsock_init
se::cleanup(boost::asio::detail::winsock_init_base::data&)]+0x1e): undefined reference to `WSACleanup@0'\\
collect2: ld returned 1 exit status''
Auch sollte nach Möglichkeit noch die Windowsversion definiert werden, z.B durch -D_WIN32_WINNT=0x0601 für Windows 7.