GTK+/Kompilacja pod systemem Windows

Kompilacja pod systemem Windows

edytuj

GTK+ jest przede wszystkim biblioteką wieloplatformową. Opisany wcześniej program można również skompilować pod systemem Windows. Do tego potrzebne będą nam:

  • środowisko programistyczne z kompilatorem
  • samo GTK+ w postaci biblioteki do uruchamiania programów, tzw. GTK+ for Windows Runtime Environment
  • biblioteka GTK+ w wersji deweloperskiej, czyli pliki nagłówkowe i źródłowe
  • przydatne narzędzie do szybkiego projektowania interfejsu użytkownika - Glade

Wszystkie te programy i biblioteki można zainstalować na kilka sposobów. Na początek wystarczy najprostszy sposób instalacji. Będzie potrzebne nam do tego:

Teraz należy zainstalować Code::Blocks. Następnie paczkę gtk+-dev-2.10.11-win32-1. Musimy zdobyć wymagane parametry do kompilatora, aby mógł on poprawnie skompilować program napisany w GTK+. Do tego użyjemy programu pkg-config. Znajduje się on w katalogu C:\GTK\bin, zakładając, że paczka gtk+-dev-2.10.11-win32-1 została zainstalowana w katalogu C:\GTK. Instalator automatycznie dodał do zmiennych systemowych użytkownika (PATH) ścieżkę C:\GTK\bin. Dzięki temu będziemy mogli wykonać polecenie pkg-config bez potrzeby wchodzenia do katalogu C:\GTK\bin. Musimy jednak jeszcze sami dodać jedną zmienną, która powie dla pkg-config gdzie znajdują się odpowiednie pakiety (np. gtk+-2.0). Wszystkie pakiety przeznaczone dla pkg-config znajdują się w katalogu C:\GTK\lib\pkgconfig. Za poinformowanie pkg-config gdzie ma szukać tych pakietów odpowiada zmienna systemowa PKG_CONFIG_PATH. Dlatego musimy dodać do zmiennych systemowych zmienną PKG_CONFIG_PATH o wartości C:\GTK\lib\pkgconfig (Mój komputer->Właściwości, karta Zaawansowane, przycisk Zmienne środowiskowe, Zmienne użytkownika dla nazwa użytkownika, przycisk Nowa zmienna: PKG_CONFIG_PATH=C:\GTK\lib\pkgconfig). Teraz możemy już uruchomić Wiersz poleceń systemu Windows. Wydajemy dwa polecenia:

  • pkg-config --cflags gtk+-2.0 - dla opcji kompilatora
  • pkg-config --libs gtk+-2.0 - dla opcji linkera

Przykład:

Wiersz poleceń:
Microsoft Windows XP [Wersja 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\grzesiek>pkg-config --cflags gtk+-2.0
-mms-bitfields -IC:/GTK/include/gtk-2.0 -IC:/GTK/lib/gtk-2.0/include -IC:/GTK/in
clude/atk-1.0 -IC:/GTK/include/cairo -IC:/GTK/include/pango-1.0 -IC:/GTK/include
/glib-2.0 -IC:/GTK/lib/glib-2.0/include -IC:/GTK/include/freetype2 -IC:/GTK/incl
ude

C:\Documents and Settings\grzesiek>pkg-config --libs gtk+-2.0
-user32 -Wl,-luuid -LC:/GTK/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -lgdi32 -limm32
-lshell32 -lole32 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lpangocairo-1.0 -
lcairo -lpangoft2-1.0 -lfontconfig -lfreetype -lz -lpango-1.0 -lm -lgobject-2.0
-lgmodule-2.0 -lglib-2.0 -lintl -liconv

C:\Documents and Settings\grzesiek> 

Wynik tych poleceń należy skopiować (bądź przekierować do pliku) i "ułożyć" w celu sprawdzenia czy nie ma błędów (np. wynik konsoli kończy się na końcu wiersza znakiem nowej linii, co powoduje przerwanie niektórych opcji i podzielenie ich znakiem Enter -IC:/GTK/in [ENTER] clude/atk-1.0). Przykładowy wynik powinien wyglądać tak:

(dla kompilatora, bez pkg-config --cflags gtk+-2.0)

-mms-bitfields 
-IC:/GTK/include/gtk-2.0 
-IC:/GTK/lib/gtk-2.0/include 
-IC:/GTK/include/atk-1.0 
-IC:/GTK/include/cairo 
-IC:/GTK/include/pango-1.0 
-IC:/GTK/include/glib-2.0 
-IC:/GTK/lib/glib-2.0/include 
-IC:/GTK/include/freetype2 
-IC:/GTK/include

(dla linkera, bez pkg-config --libs gtk+-2.0)

-user32 
-Wl,-luuid 
-LC:/GTK/lib 
-lgtk-win32-2.0 
-lgdk-win32-2.0 
-lgdi32 
-limm32
-lshell32 
-lole32 
-latk-1.0 
-lgdk_pixbuf-2.0 
-lpangowin32-1.0 
-lpangocairo-1.0 
-lcairo 
-lpangoft2-1.0 
-lfontconfig 
-lfreetype 
-lz 
-lpango-1.0 
-lm 
-lgobject-2.0
-lgmodule-2.0 
-lglib-2.0 
-lintl 
-liconv

Teraz uruchamiamy Code::Blocks. Tworzymy nowy plik źródłowy (Code::Blocks->File->New File) i zapisujemy np. pod nazwą "simple.c" (typ pliku to: C/C++ files). Następnie wklejamy wcześniej opisany kod programu w GTK+. Zapisujemy plik. Należy teraz dodać przygotowane opcje do kompilatora i linkera. Wybieramy z menu "Settings->Compiler" karta "Compiler" i podkarta "Other options" - tam wklejamy opcję dla kompilatora. Dla linkera analogicznie wybieramy zakładkę "Linker" i przygotowane opcje wklejamy do pola "Other linker options". Zatwierdzamy zmiany. Aby skompilować nasz kod musimy stworzyć projekt. Wybieramy z menu polecenie "Project->New empty" i zapisujemy np. pod nazwą 'gtk'. Dodajemy plik źródłowy "Project->Add files..." i wskazujemy gdzie zapisaliśmy wcześniej plik simple.c. Tak skompilowany program nie pokaże jednak wyników skierowanych do konsoli, na potrzeby nauki lepszym sposobem będzie tworzenie projektów z szablonu aplikacji konsolowej. W tym celu wybieramy polecenie z menu "File->New projects..." a następnie "Console Application" (zwróć uwagę na wybór języka C/C++ - wybierz C). Projekt automatycznie stworzy plik źródłowy main.c, tam też należy skopiować kod programu. Teraz możemy już zapisać cały projekt i skompilować go, a następnie uruchomić program.

Nowy sposób kompilacji

edytuj

Na początku roku 2008 oficjalna strona GTK+ została przebudowana. Pojawiła się nowa paczka "bundle" do ściągnięcia z: http://www.gtk.org/download-windows.html. Jest to tak zwany all-in-one. Zawiera pliki deweloperskie oraz binarne. Jedyne co musimy zrobić to rozpakować ją do jakiegoś katalogu oraz dodać do zmiennej środowiskowej systemu „Path” ścieżkę do katalogu bin, gdzie znajdują się niezbędne pliki bibliotek ładownych dynamicznie (*.dll). Najnowszy Code::Blocks (8.02) przy tworzeniu projektu typu aplikacja GTK+ poprosi tylko o ścieżkę do katalogu bin gdzie znajduje się między innymi pkg-config. Nie będziesz musiał sam dodawać żadnych opcji do kompilatora ani linkera. Jednak jest to dosyć okrojona wersja plików binarnych. Są tam tylko pliki niezbędne do uruchomienia programów GTK+. Mimo to znajomość starego sposobu może Ci się przydać gdy napotkasz na jakieś problemy przy kompilacji programów wymagających biblioteki GTK+. O ile paczka „bundle” jest bardzo aktualna w porównaniu do „gtk+-dev-2.10.11-win32-1” to mimo to programu Glade - do budowania graficznego interfejsu - już nie zawiera. Dlatego nowa paczka deweloperska nie zastąpi w pełni starszej. Można zainstalować najnowszą paczkę „bundle” dla najnowszej biblioteki, dodatkowo pobrać paczkę glade-win32 ze strony projektu http://sourceforge.net/projects/gladewin32/ i rozpakować ją do już istniejącej struktury katalogów z paczki „bundle”. Wtedy będziemy mieli najnowszą bibliotekę GTK+ oraz program Glade jednocześnie.