Привет. Пишу небольшую программу, надо прикрутить граф. интерфейс.
Создал форму с помощью Glade, весь код приводить не буду, там лишнего много, приведу лишь нужный кусочек:
<child>
<object class="GtkButton" id="cpubut">
<property name="label" translatable="yes">Центральный процессор</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="cpupress" object="label1" swapped="no"/>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
Собственно, <signal name=«clicked» handler=«cpupress», обработчик cpupress
Пишу на С++. Поключаю дл gtk+ заголовочный файл gtkmm.h
Далее код на С++ выглядит так (лишнее выкинул):
#include <gtkmm.h>
using namespace std;
G_MODULE_EXPORT void cpupress (GtkButton *button, GtkLabel *label)
{
gtk_label_set_text (label, "Привет, Хабр!");
}
static GtkWidget *create_window (void)
{
GtkWidget *window;
GtkBuilder *builder;
GError* error = NULL;
builder = gtk_builder_new ();
if (!gtk_builder_add_from_file (builder, "/home/vodka/programming/Diplomcpp/ui.glade", &error))
{
g_critical ("Не могу загрузить файл: %s", error->message);
g_error_free (error);
}
gtk_builder_connect_signals (builder, NULL);
window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
if (!window)
{
/* что-то не так, наверное, ошиблись в имени */
g_critical ("Ошибка при получении виджета окна");
}
g_object_unref (builder);
return window;
}
int main(int argc, char *argv[])
{
GtkWidget *window;
gtk_init (&argc, &argv);
window = create_window ();
gtk_widget_show (window);
gtk_main ();
return 0;
}
Так вот, при запуске ошибка появляется Gtk-WARNING **: Could not find signal handler 'cpupress'. Did you compile with -rdynamic?
Хотел бы спросить, где я допускаю ошибку?