Zdaję sobie sprawę z tego, że podobne tematy już się pojawiały i jest cała masa opracowań w internecie ale ja już naprawdę nie wiem co robię źle.
Najpierw postępowałem wg instrukcji prowadzącego zajęcia tzn:
1. Ściągnąć i rozpakować GTK+-bundle_2.24.10 do jakiegoś katalogu (będziemy go nazywać katalogiem GTK). W:\gtk+-2.24.10 lub W:\gtk+-2.24.8 (gdy ściągnięta była wcześniejsza wersja GTK).
Rozpakowanego zipa umieściłem na pulpicie w folderze o nazwie GTK. Jego ścieżka dostępu to C:\Users\TomekZ\Desktop
2. Uruchomić Codeblocks i otworzyć nowy projekt typu GTK+ project. Jako ścieżkę do GTK+ podać ścieżkę do katalogu GTK z punktu 1.
Po prostu wybrałem folder o nazwie GTK z pulpitu.
3. W menu Settings > Compiler and debugger w zakładce Compiler settings i podzakładce Other options (powinno tam być -std=c99) dopisać
-IW:\gtk+-2.24.8\include\gdk-pixbuf-2.0 (Zmienić tu ścieżkę na katalog GTK z punktu 1).
Zatem u siebie wpisuję:
-IC:\Users\TomekZ\Desktop\GTK\include\gdk-pixbuf-2.0
4. Ustawić zmienną PATH w zmiennych środowiska dla użytkownika (lub systemu - jeśli ktoś ma takie uprawnienia). W Windows 7 można to zrobić np przez
(a) klikniecie na menu Start,
(b) wpisanie z klawiatury słowa zmienne i wybranie Edytuj zmienne środowiska dla konta
(c) wybranie w górnej części (zatytułowanej Zmienne użytkownika dla ...) opcji Nowa i wpisanie PATH jako Nazwa Zmiennej oraz W:\gtk+-2.24.8\bin jako Wartość zmiennej.
wszystko robię tak jak opisano powyżej, na końcu w Wartość Zmiennej wpisuję C:\Users\TomekZ\Desktop\GTK\bin
GTK+ ściągam stąd:
http://www.gtk.org/download/win64.php (mam win7 64bit) w wersji 2.22
próbowałem zmieniać w ścieżkach dostępu nazwę GTK na gtk+-bundle_2.22.1 i inne tego typu ale to nic nie dało. Próbowałem też robić tak jak opisano tutaj:
http://pl.wikibooks.org/wiki/GTK%2B/Kompilacja_pod_systemem_Windowstzn. z wiersza poleceń i dostaję nawet podobny komunikat co tam, ale mimo to nie działa.
W końcu spróbowałem też z linkowanie w konkretnym projekcie korzystając z
[C++] Instalacja bibliotek w Code::BlocksRobię to w sposób opisany w tym artykule:
Dochodzę do momentu Linkowanie
Znowu klikamy przycisk Add i wpisujemy ścieżkę* do folderu lib w folderze z biblioteką, u mnie wygląda ona tak: C:\Users\Jakub\Desktop\Biblioteka\lib. I z tym nie mam problemu, ale dalej:
Jeżeli to mamy, to otwieramy zakładkę Linker settings, i tam kolejny raz przycisk Add. Plik, który chcemy dodać ma rozszerzenie *.a lub *.lib. Możemy taki plik dodać, wpisując jego ścieżkę*, lub wpisując po prostu jego nazwę, np "biblioteka" (biblioteka.a). |
Pliki z tym rozszerzeniem mam tylko w katalogu lib. No i teraz pytanie, który konkretnie mam dodać? Bo ja mam tam pełno plików z takimi rozszerzeniami (zarówno *a jak i *lib). Który z nich dodać? Dodałem wszystkie, ale błędy wyskakują takie same...
Może pokażę errory które mi wywala przy poniższym programie:
#include <gtk/gtk.h>
int main( int argc, char * argv[] )
{
gtk_init( & argc, & argv );
GtkWidget * window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
gtk_window_set_title( GTK_WINDOW( window ), "Hello" );
gtk_window_set_position( GTK_WINDOW( window ), GTK_WIN_POS_CENTER );
g_signal_connect( G_OBJECT( window ), "delete_event", G_CALLBACK( gtk_main_quit ), NULL );
gtk_container_set_border_width( GTK_CONTAINER( window ), 30 );
GtkWidget * button = gtk_button_new_with_label( "Hello World" );
gtk_container_add( GTK_CONTAINER( window ), button );
gtk_widget_show( button );
gtk_widget_show( window );
gtk_main();
return 0;
}
obj\Release\main.o:main.c|| undefined reference to `gtk_init_abi_check'|
obj\Release\main.o:main.c|| undefined reference to `gtk_window_new'|
obj\Release\main.o:main.c|| undefined reference to `gtk_window_get_type'|
obj\Release\main.o:main.c|| undefined reference to `g_type_check_instance_cast'|
obj\Release\main.o:main.c|| undefined reference to `gtk_window_set_title'|
obj\Release\main.o:main.c|| undefined reference to `g_type_check_instance_cast'|
obj\Release\main.o:main.c|| undefined reference to `gtk_window_set_position'|
obj\Release\main.o:main.c|| undefined reference to `g_type_check_instance_cast'|
obj\Release\main.o:main.c|| undefined reference to `gtk_main_quit'|
obj\Release\main.o:main.c|| undefined reference to `g_signal_connect_data'|
obj\Release\main.o:main.c|| undefined reference to `gtk_container_get_type'|
obj\Release\main.o:main.c|| undefined reference to `g_type_check_instance_cast'|
obj\Release\main.o:main.c|| undefined reference to `gtk_container_set_border_width'|
obj\Release\main.o:main.c|| undefined reference to `gtk_button_new_with_label'|
obj\Release\main.o:main.c|| undefined reference to `g_type_check_instance_cast'|
obj\Release\main.o:main.c|| undefined reference to `gtk_container_add'|
obj\Release\main.o:main.c|| undefined reference to `gtk_widget_show'|
obj\Release\main.o:main.c|| undefined reference to `gtk_widget_show'|
obj\Release\main.o:main.c|| undefined reference to `gtk_main'|
||=== Build finished: 19 errors, 0 warnings ===|
Jakieś pomysły co robię źle? Bo ja już naprawdę nie wiem.