4
votes

Hi i'm working on a project in GTK+ 3 on Ubuntu 14.04 LTS. I'm trying to use Glade,but when i tried to connect a "toggled" signal of toggle button to a function called kaczka ,after compiling i got this in my console: (Gra_w_Statki:11072): Gtk-Warning**:Could not find signal handler 'kaczka. Did you compile with -rdynamic?

The window and the button render itself and work normally except of that toggling button doesn't change anything. What am i doing wrong ?

This is how i tried to connect toggle button and function Click!

My Linker Settings are : pkg-config --libs gtk+-3.0

And my compiler settings are: pkg-config --cflags gtk+-3.0

I'm using Code ::Blocks 13.12 with GCC compiler.

And this is my code:

#include <stdlib.h>
#include <gtk/gtk.h>
void kaczka (GtkToggleButton *tbutton, gpointer data)
{
    gtk_main_quit ();
}


int main (int argc, char *argv[])
{
  GtkWidget *win = NULL;
  GtkBuilder *builder;

  gtk_init (&argc, &argv);


builder=gtk_builder_new();
gtk_builder_add_from_file( builder, "kaczka.glade", NULL);

    win=GTK_WIDGET(gtk_builder_get_object(builder,"window1"));


gtk_builder_connect_signals( builder, NULL );
g_object_unref( G_OBJECT( builder ) );



  gtk_widget_show_all (win);
  gtk_main ();
  return 0;
}
4

4 Answers

5
votes

Take a look at the gtk_builder_connect_signals() and gtk_builder_add_callback_symbol() documentation. Basically you need to either

  • use gtk_builder_add_callback_symbol() on all callbacks before connecting the signals or
  • link with gmodule-export-2.0 and use compile flags "-Wl,--export-dynamic" to export even unused symbols.
3
votes

You can add more compiler settings with,

pkg-config --libs --cflags gmodule-2.0.

If anyone is building the program with meson, just add

gmoddep = dependency('gmodule-2.0')

to list of dependencies.

0
votes

Add -rdynamic to export the function and make it visible to the loader.

> gcc pkg-config --cflags gtk+-3.0 -o kaczka kaczka.c pkg-config --libs gtk+-3.0

> ./kaczka

(kaczka:31686): Gtk-WARNING **: Could not find signal handler 'on_destroy'. Did you compile with -rdynamic?

> gcc pkg-config --cflags gtk+-3.0 -o kaczka kaczka.c pkg-config --libs gtk+-3.0 -rdynamic

> ./kaczka

No warning.

0
votes

I had the same problem and one good person helped me to solve it. Here you can find an answer from him. Just use extern "C" {//put your handlers here} block.