GTK+ i C++ - błędy

0

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.

1

a rozumiesz ten komunikat?

Gtk-ERROR **: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported

mieszasz GTK+2 i GTK+3. prawdopodobnie złą wersję biblioteki dajesz linkerowi.

1
Draqun napisał(a)

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)

Czytaj dokładnie: "Gtk v1.2 tutorial" - dziwne, aby to chodziło. Już od wersji 2.0 było sporo "deprecated".

powiedz co dają polecenia:
[code]
pkg-config --modversion gtk+-3.0
pkg-config --modversion gtk+-2.0
pkg-config --modversion gtk+
[/code]

oraz polecenie jakim kompilujes i linkujesz swoje programy

0
draqun@Damian-Linux ~ $ pkg-config --modversion gtk+-3.0
3.2.0
draqun@Damian-Linux ~ $ pkg-config --modversion gtk+-2.0
2.24.4
draqun@Damian-Linux ~ $ pkg-config --modversion gtk+
Package gtk+ was not found in the pkg-config search path.
Perhaps you should add the directory containing `gtk+.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gtk+' found
draqun@Damian-Linux ~ $ 

Myślałem, że GTK+ zachowuje kompatybilność wsteczną :/ chodź dziwne bo na windowsie wszystko działało ok.

EDYTKA

Problem rozwiązany. W linkerze zmieniłem linkowanie na starszą wersję biblioteki i zadziałało. Widzę, że jednak wszystko trzeba będzie zacząć od nowa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1