Zenedith's dev blog

Dałem się namówić.., szatanowi chyba..

Bjam i kompilacja bibliotek Boost’a.

BoostBoost jest potężnym zbiorem bibliotek rozszerzających funkcjonalności języka cpp oraz STL – można powiedzieć, że Więcej niż C++. Obecnie dostępna wersja to 1.43.0. Z Boost’em miałem już do czynienia w przeciągu ostatnich miesięcy ale nie było to doznanie na wyższym poziomie – używałem po prostu „zwykłego” Boost’a.
Niedawno postanowiłem przyjrzeć się bliżej biblioteką wchodzącym w skład Boost’a – na początek padło na Filesystem. Wcześniej miałem prekompilowane liby i dll’e w katalogu boost_1_43_0/lib, które załatwił za mnie świetny system build’u Boost.Build współpracujący z Boost.Bjam.
Wystarczy bowiem w pliku boost_1_43_0\tools\build\v2\user-config.jam odkomentować środowisko, dla którego ma nastąpić kompilacja (using msvc ; dla Visual Studio lub using gcc ; dla np. MinGW) oraz dodać aplikację bjam.exe do zmiennej środowiskowej PATH i odpalić z katalogu głównego Boost’a polecenie „bjam” (domyślnie kompilowane są wersje release ale możemy skompilować obie wersje przez polecenie „bjam debug release” ). Skompilowane lib’y trafią wówczas do katalogu bin.v2 chyba że ustawimy inaczej.
Alternatywnie dostępny jest wszystko mający, wszystko robiący instalator, który można znaleźć na stronie http://www.boostpro.com.

Próba kompilacji projektu w wersji Debug i runtime library ustawione na Multi-threaded Debug DLL (/MDd) zakończyła się jednak niepowodzeniem z komunikatem:
LINK : fatal error LNK1104: cannot open file ‚libboost_filesystem-vc80-mt-gd-1_43.lib’
LINK : fatal error LNK1104: cannot open file ‚libboost_system-vc80-mt-gd-1_43.lib’

Boost stosuje konwencję oznaczania plików statycznych bibliotek przez dodatnie przedrostka lib.

Nie posiadałem bibliotek w wersji Debug, które boost oznacza zawierając w opisie znaki -gd . Odpalenie polecenia „bjam debug” załatwiło problem.

Jeśli chcemy skorzystać z runtime library w wersji Multi-threaded Debug (/MTd), to musimy posiadac skompilowane biblioteki z przełącznikiem runtime-link=static, a więc używając polecenia „bjam runtime-link=static debug„-biblioteki te bedą w nazwie zawierać znaki -sgd.

Mamy jeszcze 3 możliwość, prawdziwą wersję dynamic, gdzie biblioteki boost’a będą wymagały plików dll wykorzystywanych bibliotek. Tę opcję załączy dla nas makro:
#define BOOST_ALL_DYN_LINK
zdefiniowane przed includem bibliotek Boost.

Bardzo użyteczne w sprawdzaniu jakie biblioteki są linkowane, jest makro
#define BOOST_LIB_DIAGNOSTIC,
które powoduje wypisywanie w oknie Output naszego IDE nazw linkowanych bibliotek.

Dla zobrazowania jak kształtują się wielkości plików wykonywalnych w poszczególnych opcjach kompilacji, prezentuję małe zestawienie:

debug, Multi-threaded Debug DLL (/MDd) , DYN_LINK: -gd-1_43.lib , 112 kb
debug, Multi-threaded Debug DLL (/MDd): -gd-1_43.lib , 173 kb
debug, Multi-threaded Debug (/MTd): -sgd-1_43.lib , 718 kb

release, Multi-threaded DLL (/MD), DYN_LINK: 38 kb
release, Multi-threaded DLL (/MD): 43 kb
release, Multi-threaded (/MT): s-1_43.lib , 169 kb

23 Czerwiec, 2008 Posted by | boost, cpp | , , | 3 komentarze

Jak to było: Nauka cpp część 1 (tło)

Mój pierwszy sensowny kontakt z cpp jak i z java miałem na studiach. Do tamtej pory „bawiłem” się dość ambitnie w php4 robiąc pewną grę (bijatykę turową) na podstawie świata Dragon Ball (swoją drogą bardzo fajna seria anime i mangi) oraz mniej ambitnie w delphi. Jednak dopiero poznanie tej największej wartości wśród programistów gier (czyli cpp) pozwoliło mi spojrzeć na tworzenie oprogramowania w inny sposób. Czytaj dalej

18 Czerwiec, 2008 Posted by | cpp, java | , | Dodaj komentarz

Java -> cpp

Trudno jest powrócić do cpp, gdy przez dobry rok pracowało się niemal wyłącznie w środowisku Javy. Prawda jest taka, że w czasie tym skupiłem się na poznaniu nowej technologi, jaką oferuje MS w postaci języka C# i całego tego „managed”.

Było fajnie – szybkość tworzenia aplikacji i intuicyjna praca – tak jak w Java’ie. Nawet jeśli chodzi o tematykę gier i tworzenia na XBOX’a, czyli technologię XNA i Managed DX. Niestety, MS się wycofał z dalszego wspierania MDX i przerzucił wszystko do XNA – mi to nie pasuje.

Zatem jak szybko przestawić się na język cpp?

Zacząłem od Symfonii – dość szybko przeleciałem stare, 3 tomowe wydanie. Okazało się, że jest to dość „stary” język cpp, poza tym nie bardzo kojarzyłem czym tak naprawdę jest STL – a o tym mówiła Pasja, której niestety nie posiadałem.

Odwiedziłem trochę portali internetowych znalazłem bardzo przyjemny, na czasie kurs, który brzmiał bardzo górnolotnie ” Megatutorial “Od zera do gier kodera”. Wprowadza czytelnika w świat cpp od podstaw, przechodząc do coraz bardziej skomplikowanych mechanizmów tego języka, mając cały czas na uwadze wszelkie niuanse i zwracając uwagę na mogące się pojawić problemy. Kurs ten omawia również technologię WinAPI, czyli programowania pod Windows.

22 Grudzień, 2007 Posted by | books, cpp, java | , | Dodaj komentarz

Hello world!

Stało się, zaczynam prowadzić bloga..

Nazywam się Mateusz Stępniak i jestem programistą. Próbuję wszystkiego na wszystkim, chociaż mam swoje typy i preferencje. Java jest ok dla szybkiego wytwarzania aplikacji, w cpp można stworzyć bardzo wydajne aplikacje (przede wszystkim gry komputerowe), języki skryptowe perl, python idalnie nadają się do pracy nad przetwarzaniem tekstów, c# to taka java,z troszkę innym ukierunkowaniem, pascal służy do nauki programowania strukturalnego. Podoba mi się baza danych MSSQL, nie jestem zwolennikiem PostgresSQL nad co preferuje MySQL. Do zadań webowych preferuję PHP5 (update: teraz node.js) nad ASP i JSP, nad symfony przedkładam własną konfigurację frameworka AdvAjax + Propel. I tak można by dalej..

19 Grudzień, 2007 Posted by | Uncategorized | 1 komentarz