Sziasztok!
Az elmúlt két napban azzal küzdöttem hogy egy GTK+ Glade + Code::Blocks ban írt kis (gyakorlatilag még Hello World szintű) programot Windows XP re portoljak.
A program tökéletesen működik Linux alatt!, Windows alatt is lefordul de a callback függvények és eseménykezelés nem működik. Tehát pl a Button1 on_click eseményét nem tudja összekapcsolni a c-ben megírt fv-vel.
Linux alatt ugyan ezt a problémát sikerült úgy megoldani, hogy a Code::Blocks ban a Project -> build options -> Linker settings -> Other linker options -ba beírtam a" `pkg-config --cflags --libs gtk+-2.0` -export-dynamic " sort ám ez Windows alatt nem működik.
Interneten kerestem a megoldást bár egyértelmű választ nem kaptam " pkg-config " ra gondolok.
A GTK-t telepítettem, és a bin mappájából a pkg-config.exe-t abba a mappába másoltam (egy csomó dll-el együtt) ahol a program van de nem tudom hogy így megtalálja e.
A `` (vissza aposztróf) lehet hogy ezt sem tudja a Windows erre még nem találtam interneten semmit.
A fordítás során Windows alatt egy warning: --export-dynamic is not supported for PE targets, did you mean --export-all-symbols? üzenetet kapok.
Futtatás során a terminálba írja: (test.exe:1304): Gtk-WARNING **: Could not find signal handler ' on_click_fv'
A program forrása:
#include
#include // g_sprintf
#include // system (web link)
#include // GDK_Escape
/* Well, by golly, this program uses widgets: */
typedef struct
{
GtkWidget *window1;
GtkWidget *label1;
} AppWidgets;
#if 1
#define UNUSED gpointer _x_ G_GNUC_UNUSED
#define FOCUSED GTK_EDITABLE( \
(GTK_WIDGET_HAS_FOCUS(app->entry2))?app->entry2:app->entry1)
#endif
void on_click_fv(UNUSED, AppWidgets *app)
{
gtk_label_set_text(GTK_LABEL(app->label1),"OK");
}
int main(int argc, char **argv)
{
GtkBuilder *builder;
AppWidgets *app = g_slice_new(AppWidgets);
GError *err = NULL;
gtk_init(&argc, &argv);
builder=gtk_builder_new();
gtk_builder_add_from_file(builder, "test.glade", &err);//xml formátumban
if (err)
{
g_error(err->message);
g_error_free(err);
g_slice_free(AppWidgets, app);
return 1;
}
//Get handles to our app widgets.
#define appGET(xx) \
app->xx=GTK_WIDGET(gtk_builder_get_object(builder,#xx))
appGET(label1);
appGET(window1);
gtk_builder_connect_signals(builder, app);
g_object_unref(G_OBJECT(builder));
gtk_main();
g_slice_free(AppWidgets, app);
return 0;
}
Linux alatt szépen összekapcsolja a on_click_fv -t a button1 el, de Windows alatt sehogy sem megy.
Remélem tudtok segíteni a problémám megoldásában.
Köszönettel: Novarobot.