GTK met C onder Windows

Pagina: 1
Acties:
  • 142 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • 2playgames
  • Registratie: Februari 2005
  • Laatst online: 01-06 15:19
Voor mijn opleiding ga ik met een groepje een digitale leeromgeving maken. Hiervoor moeten we een grafische client voor Windows maken.

Ik heb voor het maken van de interface al gekeken naar de officiele Windows API, maar deze vind ik te omslachtig en het gaat ons te veel tijd kosten die we niet hebben :(

Dus heb ik even gekeken naar GTK+. Dit ziet er veel makkelijker uit (met zijn pseudo-object-georienteerdheid), maar het lukt me dan weer niet om deze aan het werk te krijgen.

Ik heb het eerst geprobeerd met Dev-C++, maar de paketten die daarvoor nodig zijn, zijn bijna allemaal outdated en moeilijk in te stellen. Bovendien vindt ik het geen fijne IDE

Nu probeer ik het met Eclipse en MinGW. Ik heb Eclipse (+CDT) nu goed ingesteld en ik kan Hello World compileren.

Kan iemand mij uitleggen:
- hoe ik GTK+ opzet met Eclipse
- of als jullie een beter opstelling weten, welke dan?
- of als jullie een makkelijkere API dan GTK weten, welke dan? Qt leek me ook wel wat, maar we moeten C gebruiken, C++ is (helaas, voor zover ik weet) niet toegestaan.

Op internet is hier helaas geen goede documentatie over te vinden (ze vinden Windows denk ik niet zo leuk :p)

Bij voorbaat dank

[ Voor 8% gewijzigd door 2playgames op 23-04-2007 19:36 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Als je de comeau compiler gebruikt kun je gewoon C++ code schrijven - die compileert namelijk naar C code :P

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • 2playgames
  • Registratie: Februari 2005
  • Laatst online: 01-06 15:19
kleine update:

ik heb het laatste developmentpakket van Glade for Windows gedownload en geinstalleerd, maar hoe krijg ik die nu in Eclipse (of Dev C++) aan de praat?

ik heb geprobeerd het compiler commando in Eclipse als volgt in te stellen:
code:
1
gcc `pkg-config --cflags --libs gtk+-2.0`

maar dat resulteert in de output:
code:
1
2
3
4
5
6
7
mingw32-make -f makefile all 
'Building file: ../main.c'
'Invoking: GCC C Compiler'
gcc `pkg-config --cflags --libs gtk+-2.0` -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -o"main.o" "../main.c"
gcc: cannot specify -o with -c or -S and multiple compilations
mingw32-make: *** [main.o] Error 1
Build complete for project HelloLaptop


dit wordt veroorzaakt doordat pkg-config ... een fout veroorzaakt, wat natuurlijk in een ongeldig gcc commando resulteert.

ik heb include en lib uit C:\Program Files\Common Files\GTK\2.0 verplaatst naar C:\gtkdev en C:\gtkdev\lib\pkgconfig in PKG_CONFIG_PATH gezet.
nu heb ik ook de mappen bin, share, en etc gekopieerd

dit levert al de iets acceptabelere pkg-config output:

code:
1
-mms-bitfields -IC:/gtkdev/include/gtk-2.0 -IC:/gtkdev/lib/gtk-2.0/include -IC:/gtkdev/include/atk-1.0 -IC:/gtkdev/include/cairo -IC:/gtkdev/include/pango-1.0 -IC:/gtkdev/include/glib-2.0 -IC:/gtkdev/lib/glib-2.0/include -IC:/gtkdev/include/freetype2 -IC:/gtkdev/include  -user32 -Wl,-luuid -LC:/gtkdev/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


maar de output van eclipse blijft gelijk (vermoedelijk kent windows die backtick-constructie niet?). als ik `pkg-config ...` handmatig vervang door de bovenstaande output, krijg ik weer deze output:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
gcc: -luuid: linker input file unused because linking not done
gcc: -lgtk-win32-2.0: linker input file unused because linking not done
gcc: -lgdk-win32-2.0: linker input file unused because linking not done
gcc: -lgdi32: linker input file unused because linking not done
gcc: -limm32: linker input file unused because linking not done
gcc: -lshell32: linker input file unused because linking not done
gcc: -lole32: linker input file unused because linking not done
gcc: -latk-1.0: linker input file unused because linking not done
gcc: -lgdk_pixbuf-2.0: linker input file unused because linking not done
gcc: -lpangowin32-1.0: linker input file unused because linking not done
gcc: -lpangocairo-1.0: linker input file unused because linking not done
gcc: -lcairo: linker input file unused because linking not done
gcc: -lpangoft2-1.0: linker input file unused because linking not done
gcc: -lfontconfig: linker input file unused because linking not done
gcc: -lfreetype: linker input file unused because linking not done
gcc: -lz: linker input file unused because linking not done
gcc: -lpango-1.0: linker input file unused because linking not done
gcc: -lm: linker input file unused because linking not done
gcc: -lgobject-2.0: linker input file unused because linking not done
gcc: -lgmodule-2.0: linker input file unused because linking not done
gcc: -lglib-2.0: linker input file unused because linking not done
gcc: -lintl: linker input file unused because linking not done
gcc: -liconv: linker input file unused because linking not done


al die libraries, ik snap er geen snars van :(

update:

Ik heb gevonden dat deze fouten veroorzaakt worden doordat ik libraries aan de compiler zit te geven. deze heb ik nu netjes overgezet naar de linker. nu krijg ik het volgende
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
**** Build of configuration Debug for project HelloLaptop ****

mingw32-make -f makefile all 
'Building target: HelloLaptop.exe'
'Invoking: GCC C Linker'
gcc -luuid -LC:/gtkdev/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  -o"HelloLaptop.exe"  ./main.o   
./main.o(.text+0xf): In function `g_win32_get_system_data_dirs':
C:/gtkdev/include/glib-2.0/glib/gutils.h:139: undefined reference to `g_win32_get_system_data_dirs_for_module'
./main.o(.text+0x34): In function `hello':
D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:7: undefined reference to `g_print'
./main.o(.text+0x63): In function `delete_event':
D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:19: undefined reference to `g_print'
./main.o(.text+0x78): In function `destroy':
D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:30: undefined reference to `gtk_main_quit'
./main.o(.text+0xda): In function `main':
D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:41: undefined reference to `gtk_init_abi_check'
./main.o(.text+0xe7):D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:44: undefined reference to `gtk_window_new'
./main.o(.text+0x10d):D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:52: undefined reference to `g_type_check_instance_cast'
./main.o(.text+0x116):D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:52: undefined reference to `g_signal_connect_data'
./main.o(.text+0x139):D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:58: undefined reference to `g_type_check_instance_cast'
./main.o(.text+0x142):D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:58: undefined reference to `g_signal_connect_data'
./main.o(.text+0x155):D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:61: undefined reference to `gtk_container_get_type'
./main.o(.text+0x161):D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:61: undefined reference to `g_type_check_instance_cast'
./main.o(.text+0x16a):D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:61: undefined reference to `gtk_container_set_border_width'
./main.o(.text+0x17a):D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:64: undefined reference to `gtk_button_new_with_label'
./main.o(.text+0x1a0):D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:70: undefined reference to `g_type_check_instance_cast'
./main.o(.text+0x1a9):D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:70: undefined reference to `g_signal_connect_data'
./main.o(.text+0x1c0):D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:77: undefined reference to `g_type_check_instance_cast'
./main.o(.text+0x1c9):D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:77: undefined reference to `gtk_widget_destroy'
./main.o(.text+0x1db):D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:77: undefined reference to `g_type_check_instance_cast'
./main.o(.text+0x1e4):D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:77: undefined reference to `g_signal_connect_data'
./main.o(.text+0x1f8):D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:80: undefined reference to `gtk_container_get_type'
./main.o(.text+0x204):D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:80: undefined reference to `g_type_check_instance_cast'
./main.o(.text+0x20d):D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:80: undefined reference to `gtk_container_add'
./main.o(.text+0x21b):D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:83: undefined reference to `gtk_widget_show'
./main.o(.text+0x229):D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:86: undefined reference to `gtk_widget_show'
./main.o(.text+0x231):D:/Programmeren/Eclipse/HelloLaptop/Debug/../main.c:91: undefined reference to `gtk_main'
mingw32-make: *** [HelloLaptop.exe] Error 1
Build complete for project HelloLaptop


hij kan dus op de een of andere manier de libraries niet vinden

update: eindelijk, ik heb hem foutloos gecompileerd gekregen, maar als ik het programma uitvoer krijg ik een lege dosbox en een messagebox:
Kan entrypoint van procedure g_win32_get_system_data_dirs_for_module niet vinden in DLL-bestand libglib-2.0-0.dll
de code is de standaard GTK hello world
http://www.gtk.org/tutorial/c39.html#SEC-HELLOWORLD

update: hij draait nu, maar alleen als ik de DLL's uit C:\GTK\bin naar mijn programmamap kopieer. Windows kan ze dus blijkbaar niet vinden. Dan heb ik ook nog een ander probleempje. bij het opstarten krijg ik de melding:
(HelloLaptop.exe:4776): Pango-WARNING **: _pango_cairo_font_install called withbad font, expect ugly output
met als resultaat dat "Hello World" als "□□□□□□□□□□□" weergegeven wordt

mijn collega die alleen de nieuwste GTK runtime heeft, kan het programma zonder problemen draaien (hij hoeft ook geen DLL's te kopieren). als ik de installer van de GIMP site draai, zegt hij dat GTK al geinstalleerd is (wat dus klopt)

[ Voor 50% gewijzigd door 2playgames op 24-04-2007 10:50 ]