您好我正在使用Ubuntu 14.04 LTS上的GTK + 3项目。我正在尝试使用Glade,但当我尝试将切换按钮的“切换”信号连接到一个名为kaczka的函数时,编译后我在控制台中得到了这个:(Gra_w_Statki:11072): Gtk-Warning**:Could not find signal handler 'kaczka. Did you compile with -rdynamic?
窗口和按钮呈现自身并正常工作,除了切换按钮不会改变任何东西。我做错了什么?
这就是我尝试连接切换按钮和功能Click!
的方法我的链接设置为:pkg-config --libs gtk+-3.0
我的编译器设置为:pkg-config --cflags gtk+-3.0
我正在使用Code :: Blocks 13.12和GCC编译器。
这是我的代码:
#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;
}
答案 0 :(得分:4)
查看gtk_builder_connect_signals()和gtk_builder_add_callback_symbol()文档。基本上你需要
gtk_builder_add_callback_symbol()
或答案 1 :(得分:1)
您可以使用
添加更多编译器设置 pkg-config --libs --cflags gmodule-2.0
。
如果有人用meson构建程序,只需添加
gmoddep = dependency('gmodule-2.0')
列出依赖项。
答案 2 :(得分:0)
添加-rdynamic以导出该函数并使其可见 到装载机。
&GT; gcc
pkg-config --cflags gtk+-3.0
-o kaczka kaczka.cpkg-config --libs gtk+-3.0
&GT; ./kaczka
(kaczka:31686):Gtk-WARNING **:无法找到信号处理程序'on_destroy'。你用-rdynamic编译了吗?
&GT; gcc
pkg-config --cflags gtk+-3.0
-o kaczka kaczka.cpkg-config --libs gtk+-3.0
-rdynamic&GT; ./kaczka
没有警告。
答案 3 :(得分:0)
我遇到了同样的问题,一位好心人帮我解决了这个问题。 Here 你可以从他那里找到答案。只需使用 extern "C" {//put your handlers here}
块。
答案 4 :(得分:-1)
我认为你的kaczka.glade
可能会出错。
我使用了您的.c
源文件并创建了自己的.glade
,并且运行良好。
你正在尝试使用什么版本的Glade? p>
运行最新版本,看它是否解决了问题。