code__blocks

SFML i Code::Blocks (MinGW)

Wstęp


Ten poradnik jest skierowany do osób, które używają Code::Blocks i kompilator GCC (to jest standardowy kompilator). Wyjaśnię ci jak należy skonfigurować C::B, aby działał SFML

UWAGA! Poniższa instrukcja instalacji na C::B dotyczy tylko Windowsa (pomijam już fakt, że obecne wersje C::B odbiegają trochę od tego co widać na screenach).

 

Instalacja SFML


Po pierwsze musisz pobrać SFML SDK ze >>strony pobierania<<

UWAGA!!! Są, róże rodzaje kompilatora gcc dla Windows’a, upewnij się że pobierzesz kompatybilną wersję z tą której ty używasz w przeciwnym wypadku kod nie będzie się kompilował. Ewentualnie możesz >>przekompilować SFML<<.

Wypakuj pliki w dowolnym miejscu, zalecane jest aby była to specjalna ścieżka dla twoich bibliotek, np Biblioteki/SFML/. Nie jest polecane kopiowanie wszystkich plików (nagłówków itd.) do folderu z MinGW.

You can then unpack the SFML archive wherever you like. Copying headers and libraries to your installation of MinGW is not recommended, it’s better to keep libraries in their own separate location, especially if you intend to use several versions of the same library, or several compilers.

 

Tworzenie i konfigurowanie projektu


Kolejne czynności będziesz musiał powtarzać przy każdym tworzeniu nowego projektu. Po pierwsze musisz wybrać rodzaj projektu jaki chcesz utworzyć. C::B ma do zaoferowania wiele ich rodzajów, jednym z nich jest „SFML project” lecz nie używaj go! Niestety wciąż nie działa prawidłowo. Ja polecam wybrać Empty Project.

Kolejnym krokiem jest poinformowanie kompilatora o ścieżkach, gdzie znajdują się pliki hpp i lib. W projekcie „Build options, „Search directories” dodaj:

  • ścieżkę do plików nagłówkowych (<ścieżka do sfml>/include) w „Compiler search directories”
  • ścieżkę do plików lib (<ścieżka do sfml>/lib) w „Linker search directories”

Te ścieżki są identyczne dla trybu Debug i Release, więc możesz je dodać globalnie:

Następny krok to zlinkowanie twojej aplikacji z plikami library (pliki .a), które twój kod będzie potrzebował. SFML posiada 5 modułów (system, window, graphics, network i audio), na każdy z nich jest oddzielny plik library. Te pliki muszą zostać dodane we właściwościach projektu, zakładka „Linker settings”, lista „Link libraries”. Dodaj te pliki, których będziesz potrzebował, np:

sfml-graphics
sfml-window
sfml-system

Rozszerzenie „.a” oraz prefixy „lib” należy pominąć.

Należy pamiętać aby przy linkowaniu aplikacji, nazwy zgadzały się dla trybu Debug (np sfml-system-d) oraz dla trybu Release (sfml-system).

Kiedy linkujesz wielokrtnie biblioteki pamiętaj aby zachować odpowiednią kolejność, to jest bardzo ważne dla gcc. Każda biblioteka SFML bazuje na sfml-system, a sfml-graphics na sfml-window. Więc prawidłowa kolejność dla trzech bibliotek wygląda następująco: sfml-graphics, sfml-window, sfml-system.

Ustawienia pokazane tutaj są zlikowane dla wersji dynamicznej SFML’a, to znaczy że projekt potrzebuje plików DLL. Jeżeli  chcesz pozbyć się tych plików i mieć je zintergrowane bezpośrednio plikiem exe musisz zlinkować projekt do statycznej wersji. Pliki library dla statycznej wersji mają „-s” suffix: „sfml-xxx-s-d” dla Debug, i „sfml-xxx-s” dla Release. Dodatkowo musisz zdefiniować makro SFML_DYNAMIC w „Preprocessor options” w twoim projekcie.

Jeżeli nie znasz różnić pomiędzy linkowaniem statycznym i dynamicznym to odsyłam cię do Google’a. Twój projekt jest już gotowy do użycia, aby przetestować czy udało nam się skonfigurować C::B, wklej ten kod:

Jeżeli zlinkowałeś projekt dynamicznie nie zapomnij skopiować plików DLL do folderu z plikiem .exe (znajdziesz je w folderze: <sfml-ścieżka-instalacji/bin>). Następnie skompiluj kod i powinieneś zobaczyć coś takiego:

Oryginalny artykuł


  • Johny Bravo

    Dlaczego za każdym razem program się wysypuje i pisze, że program SFML.exe przestał działać ? Proszę o pomoc

    • Dołączyłeś wszystkie wymagane .dll?

      • Johny Bravo

        Tak. obejrzałem kilka poradników na YT i na równych portalach, ludziom wszystko się udało, mnie to nadal nie działa. Mnie najbardziej zastanawia dlaczego program się kompiluje, ale pokazuje się błąd po skompilowaniu.

        • Wina leży albo po stronie błędnej konfiguracji i niezrobieniu czegoś, albo po stronie C::B, nie jestem w stanie ci pomóc jeżeli twierdzisz że wykonałeś wszystkie instrukcje zawarte w tym wpisie, zlinkowałeś biblioteki, a pliki .dll dołączyłeś do pliku wykonywalnego. C::B nie jest środowiskiem programowania, z którego korzystam więc jego błędy są mi zupełnie obce.

          • Johny Bravo

            Ok, ale dzięki za starania.