Postanowiłem się pouczyć pisać aplikacje okienkowe w C++ z użyciem GTK+. Niestety napotkałem pewien problem. O ile pod Windą GTK+ działa wyśmienicie aż chce się patrzeć tak pod Linuxem (o dziwo) program nie chodzi.
#include<gtk/gtk.h>
gint exit_program(GtkWidget *kontrolka, gpointer *dane)
{
gtk_main_quit();
return(FALSE);
}
gint menuitemaction(gchar *dane)
{
g_print("Akcja: %s\n", dane);
return(FALSE);
}
int main(int argc, char *argv[])
{
GtkWidget *okno;
GtkWidget *menubar;
GtkWidget *menu_bar;
GtkWidget *pmenu;
GtkWidget *elmenu;
GtkWidget *vbox;
gtk_init(&argc, &argv);
okno = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_set_usize (GTK_WIDGET (okno), 200, 100);
menubar = gtk_menu_new();
//elementy menu
elmenu = gtk_menu_item_new_with_label("Otworz");
gtk_menu_append(GTK_MENU(menubar), elmenu);
gtk_signal_connect_object(GTK_OBJECT(elmenu), "activate", GTK_SIGNAL_FUNC(menuitemaction), (gpointer)g_strdup("Otworz"));
gtk_widget_show(elmenu);
elmenu = gtk_menu_item_new_with_label("Zapisz");
gtk_menu_append(GTK_MENU(menubar), elmenu);
gtk_signal_connect_object(GTK_OBJECT(elmenu), "activate", GTK_SIGNAL_FUNC(menuitemaction), (gpointer)g_strdup("Zapisz"));
gtk_widget_show(elmenu);
elmenu = gtk_menu_item_new_with_label("Zakoncz");
gtk_menu_append(GTK_MENU(menubar), elmenu);
gtk_signal_connect_object(GTK_OBJECT(elmenu), "activate", GTK_SIGNAL_FUNC(exit_program), (gpointer)g_strdup("Zakoncz"));
gtk_widget_show(elmenu);
pmenu = gtk_menu_item_new_with_label("Menu");
gtk_widget_show(pmenu);
gtk_menu_item_set_submenu (GTK_MENU_ITEM (pmenu), menubar);
vbox=gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(okno), vbox);
gtk_widget_show(vbox);
menu_bar = gtk_menu_bar_new ();
gtk_box_pack_start (GTK_BOX (vbox), menu_bar, FALSE, FALSE, 2);
gtk_widget_show (menu_bar);
gtk_menu_bar_append (GTK_MENU_BAR (menu_bar), pmenu);
gtk_window_set_title(GTK_WINDOW(okno), "Program");
gtk_signal_connect(GTK_OBJECT(okno), "delete_event", GTK_SIGNAL_FUNC(exit_program), NULL);
gtk_widget_show(menubar);
gtk_widget_show(okno);
gtk_main();
return 0;
}
Program z tutorialu zamieszczony pod adresem http://www.gtk.org/tutorial1.2/gtk_tut-13.html również nie działa. I nie jest to problem z flagami czy opcjami linkera. Zwyczajnie otrzymuję komunikat (w obu przypadkach)
Gtk-ERROR **: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported
Process returned -1 (0xFFFFFFFF) execution time : 0.039 s
Press ENTER to continue.
Z czego to wynika? Żadnych innych informacji, które to funkcje, i czym je zastąpić.
Czasem wydaje mi się, że opensourcowe biblioteki lepiej działają na windzie ;)
Pozdro.