From Gossip@caterpillar

GTK Gossip: Ubuntu ¤U¦w¸Ë GTK

¦b¼¶¼g³o½g±Ð¾Ç¤å¥ó®É¥¿¦n¦bª±Ubuntu¡A³oÃ仡©ú¤@¤U¦p¦ó¦bUbuntu¤U³]©wGTK¶}µo°ò¥»Àô¹Ò¡C

¥Ñ©óGTK°ò¥»¤W¥D­n¥HC»y¨¥¨Ó¼¶¼g¡A±z¥²¶·¦³C½s;¹¡AUbuntu¹w³]¦w¸Ë¦n«á´N¦³gcc¤F¡A¤£¹L¯Ê¤Ö¥²­nªºHeader file¡A±z¥i¥H¦b¤å¦r¼Ò¦¡¤U¡A¦w¸Ëbuild-essential®M¥ó¡A¨Ò¦p¡G
sudo apt-get install build-essential

¦w¸Ë§¹¦¨«á¡A¥i¥H¼g­Ó°ò¥»ªºC»y¨¥µ{¦¡¡G
  • hello.c
#include <stdio.h>

int main(void) {
printf("Hello! World!\n");
printf("«¢Åo¡IC»y¨¥¡I\n");
return 0;
}

½sĶ¨Ã°õ¦æ¬Ý¬Ý¡G

$ gcc -o hello hello.c
$./hello
Hello! World!
«¢Åo¡IC»y¨¥¡I


¦A¨Ó¦w¸ËGTK¶}µo®M¥ólibgtk2.0-dev¡G
sudo apt-get install libgtk2.0-dev

¦w¸Ë§¹¦¨«á¡A¥i¥H¨Ï¥Îpkg-config¬d¬Ý¤@¤UGTKªº¬ÛÃö½sĶÀô¹Ò¸ê°T¡G
pkg-config --cflags --libs gtk+-2.0

pkg-config·|Ū¨úGTKªþ±aªº.pcÀɨӨú±o¬ÛÃö½s͏ê°T¡A--cflags·|¦C¥Xinclude¥Ø¿ý¡A--libs¦C¥X©Ò³sµ²ªº¨ç¦¡®w¤Î¨ä©Ò¦b¥Ø¿ý¡A¥H§Úªº¹q¸£¬°¨Ò¡G
$ pkg-config --cflags --libs gtk+-2.0
-I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/pixman-1  -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0


¥i¥H¤À¶}°õ¦æ¤ñ¸û²M·¡¡A¨Ò¦p¡G
$ pkg-config --cflags gtk+-2.0
-I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/pixman-1  
$ pkg-config --libs gtk+-2.0
-lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 

©Ò³sµ²ªº¨ç¦¡®w¥]¬A¤F¡]Â^¨ú½Ķ¦ÛCompiling Hello World¡^¡G
  • GTK¡]-lgtk¡^¡G°ò©ó GDK ªº widget ¨ç¦¡®w¡C
  • GDK¡]-lgdk¡^¡GXlib ¥]ùØ¡]Wrapper¡^¡C.
  • gdk-pixbuf¡]-lgdk_pixbuf¡^¡G¼v¹³³B²z¨ç¦¡®w¡C
  • Pango¡]-lpango¡^¡G°ê»Ú¤Æ¤å¦r¡C
  • gobject¡]-lgobject¡^¡GGTK ¥Î¥H¬°°ò¦ªº«¬ºA¨t²Î¡C
  • gmodule¡]-lgmodule¡^¡G¥Î¨Ó¸ü¤J°õ¦æ®É´ÁªºÂX¥R¡C
  • GLib¡]-lglib¡^¡G¥]¬A¦UºØ¨ç¦¡¡AGTK °ò©ó GLib¡A©Ò¥H±z·|»Ý­n³o­Ó¨ç¦¡®w¡C
  • Xlib¡]-lX11¡^¡G³Q GDK ©Ò¨Ï¥Î¡C
  • Xext¡]-lXext¡^¡G¥]¬A¦@¨É°O¾ÐÅé pixmaps¡]shared memory pixmaps¡^»P¨ä¥¦ X ÂX¥R¡C
  • math¡]-lm¡^¡G¦]¦UºØ¥Øªº¦Ó³Q GTK ©Ò¨Ï¥Îªº¼Æ¾Ç¨ç¦¡®w¡C

GTK°ò©óGDK¡]Gnome Drawing Kit¡^¡AGDKÅU¦W«ä¸q¡A´N¬O¤@­Ó»Pø¹Ï¬ÛÃöªº¶}µo¤u¨ã½c¡AGDK±NXlib¡]X¨ç¦¡®w¡^¥[¥H¥]¸Ë²¤Æ¡A¹³¬OÂI¡B½u¡Bµøµ¡¡B¦â±mµ¥ªº³]©w¡A¥H¤ÎÁä½L¡B·Æ¹«µ¥¨Æ¥óªº¤ä´©¡C

GLib°ò¥»¤W¬O±NCªº
«¬ºA¡B°}¦C¡B¨ç¦¡®wµ¥­«·s¥]¸Ë¡A¨Ò¦p¦b/usr/include/glib-2.0/glib/gtypes.h¤¤¡A©w¸q¤F¤@¨Ç°ò¥»¸ê®Æ«¬ºA¡A¨Ï¨ä§ó®e©ö¹F¨ì¥iÄâ©Ê¡G
typedef char   gchar;
typedef short  gshort;
typedef long   glong;
typedef int    gint;
typedef gint   gboolean;

typedef unsigned char   guchar;
typedef unsigned short  gushort;
typedef unsigned long   gulong;
typedef unsigned int    guint;

typedef float   gfloat;
typedef double  gdouble;

¦b¼¶¼gGTKµ{¦¡®É¡A­Y¨£¨ì¥Hg_¶}ÀYªº«¬ºA©Î¨ç¦¡¡A©Î¬O¥HG_¶}ÀYªº¥¨¶°¡A³£¬O¥ÑGLib´£¨Ñ¡C

ÁöµM»¡GTK°ò©óGDK¤ÎGLib¡A¦ý¦b¼¶¼gGTKµ{¦¡®É¡A¤]±`¨£¨ìGDK¤ÎGLib¬ÛÃö¨ç¦¡©Îµ²ºc¡A©Ò¥H§ó½T¹êªº»¡ªk¬O¡AGTK¥»¨­±Mª`¦bµøµ¡¤¸¥ó¤§¦w±Æ¡A¨Ã»PGDK¤ÎGLibºò±Kµ²¦X¡C