Newsgroup: it.comp.os.linux.development
Titolo: non compila GTK+

Allora mi sono messo in testa di imparare le GTK+, sul web ho trovato
questo esempio:
#include <gtk/gtk.h>
GtkWidget *window;
GtkWidget *box; 
GtkWidget *bottone1, *bottone2, *bottone3;
GtkWidget *etichetta;
gint hide = 1;
/*
 funzioni di callback:
 le funzioni di callback verranno richiamate 
 quando si verificher? un qualche evento,
 click del mouse su un bottone,..
*/
 
gint exit_cb(GtkWidget *w, gpointer data)
{
   g_print("\nAddio mondo crudele... :(\n");
   gtk_main_quit();
   return (FALSE);
}
gint delete(GtkWidget *w, GdkEvent *event, gpointer data)
{
   return TRUE;
}
void ciao_mondo(GtkWidget *w, gpointer data)
{
   g_print("Siamo nella ciao mondo callback\n");
}
void hide_show_mondo(GtkWidget *wg, gpointer data)
{
   GtkWidget *bt = GTK_WIDGET(data);
   if (hide == 0) 
   {
      gtk_widget_show(bt);
      hide = 1;
      gtk_label_set(GTK_LABEL(wg)->label,"Nascondi Mondo");
   }
   else 
   {
      gtk_widget_hide(bt);
      hide = 0;
      gtk_label_set(GTK_LABEL(wg)->label,"Mostra Mondo");
   }
 
   g_print("Siamo nella hide_show_mondo callback\n");
}
int main(int argc, char *argv[])
{
   /* inizializzazione della libreria di gtk 
   */
   gtk_init(&argc, &argv);
   /* creazione della finestra principale 
   */
   window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   /* fisso le dimensioni della finestra a 250x200 pixel 
   */
   gtk_widget_set_usize(GTK_WIDGET(window), 250,200);
   /* diamo un titolo alla finestra 
   */
   gtk_window_set_title(GTK_WINDOW(window),"Gtk Ciao Mondo test");
   /* colleghiamo la finestra alle funzioni di callback 
   */
   gtk_signal_connect(GTK_OBJECT(window),
      "delete_event",
      GTK_SIGNAL_FUNC(delete),
      NULL);
   gtk_signal_connect(GTK_OBJECT(window),
      "destroy",
      GTK_SIGNAL_FUNC(exit_cb),
      NULL);
   gtk_container_set_border_width(GTK_CONTAINER(window),15);
   /* creo una "scatola" che pu? contenere oggetti disposti 
      in verticale, la inserisco nella finestra principale 
      e la rendo visibile 
   */
   box = gtk_vbox_new(FALSE,1);
   gtk_container_add(GTK_CONTAINER(window), box);
   gtk_widget_show(box);
   /* creiamo tre bottoni
    */
   bottone1=gtk_button_new_with_label(" Ciao Mondo ");
   gtk_box_pack_end(GTK_BOX(box),
      bottone1,
      FALSE,
      FALSE,
      15);
 
   gtk_signal_connect(
      GTK_OBJECT(bottone1),             /* oggetto che emette il segnale             */
      "clicked",                        /* segnale emesso                            */
      GTK_SIGNAL_FUNC(ciao_mondo),      /* funzione da richiamare                    */
      NULL);                            /* dati da passare alla funzione da chiamare */
   gtk_widget_show(bottone1);
   bottone2=gtk_button_new();
   etichetta = gtk_label_new("Nascondi Mondo");
   gtk_container_add(GTK_CONTAINER(bottone2),etichetta);
   gtk_widget_show(etichetta);
   gtk_box_pack_start(GTK_BOX(box),
      bottone2,
      FALSE,
      FALSE,
      15);
   gtk_signal_connect(
      GTK_OBJECT(bottone2),
      "clicked",
      GTK_SIGNAL_FUNC(hide_show_mondo),
      (gpointer) bottone1);
 
   gtk_widget_show(bottone2);
   bottone3=gtk_button_new_with_label(" Esci ");
   gtk_box_pack_start(GTK_BOX(box),
      bottone3,
      FALSE,
      FALSE,
      15);
   gtk_signal_connect(GTK_OBJECT(bottone3),
      "clicked",
      GTK_SIGNAL_FUNC(exit_cb),
      NULL);
   gtk_widget_show(bottone3);
 
   gtk_widget_show(window);
   gtk_main();
 
   return 0;
}
Tutto sommato l'ho capito, ma non sono riuscito a compilarlo. Ecco
l'errore:
[root@localhost silvios]#  gcc -Wall -g helloword.c -o ciaomondo 'gtk-config --cflags' 'gtk-config --libs'
gcc: gtk-config --cflags: No such file or directory
gcc: gtk-config --libs: No such file or directory
In file included from /usr/include/gdk/gdk.h:31,
                 from /usr/include/gtk/gtk.h:31,
		 from helloword.c:1
/usr/include/gdk/gdktypes.h:33:18: glib.h: No such file or directory
In file included from /usr/include/gtk/gtkarg.h:31,
		from /usr/include/gtk/gtkobject.h:31,
		from /usr/include/gtk/gtkaccelgroup.h:35,
		 from /usr/include/gtk/gtk.h:32,
		from helloword.c:1:
/usr/include/gtk/gtktypeutils.h:31:18: glib.h: No such file or directory
Ho una MDK 8.1 che posso fare?
Grazie
--
Abruzzo Silvio

 Ho una MDK 8.1 che posso fare?
Correggere la linea di comando.
gcc -Wall -g helloword.c -o ciaomondo `gtk-config --cflags --libs`
Nota le backquotes (apostrofi al contrario) al posto degli apostrofi
semplici.  
gtk-config genera una stringa con una serie di opzioni per il
compilatore, e le backquotes sulla linea di comando sostituiscono, al
loro contenuto, l'output derivante dall'esecuzione del loro contenuto.
Sicuramente se leggi piu` attentamente il tutorial noterai che non
sono apostrofi.
Ah, usare il tuo sistema come utente normale anziche' root non sara`
di aiuto alla compilazione, ma e` buona pratica e alla lunga potrebbe
risparmiarti qualche (grossa) noia. :-)
Massimiliano 

 apostrofi semplici.  
<ahem> Piccolo consiglio da amica: evitate le backquote! usate $() che 
è tanto bello, è più chiaro, non si fa confusione con gli apostrofi, e 
tutti sanno immediatamente come digitarlo </ahem>

 tutti sanno immediatamente come digitarlo </ahem>
<uhem>Mi sembra che $() non sia supportato da tutte le shell.</uhem>
Massimiliano

 
Grazie, per l'esauriente spiegazione.
--
Abruzzo Silvio