使用Glade运行GTK时,我收到以下警告-找不到信号处理程序';在“窗口”主目录上;。你是用-rdnamic编译的吗?

使用Glade运行GTK时,我收到以下警告-找不到信号处理程序';在“窗口”主目录上;。你是用-rdnamic编译的吗?,gtk,glade,Gtk,Glade,然后这个 g++ -c -g -O0 -Wall -pthread -pipe src/main.cpp -lcurl `pkg-config --cflags --libs gtk+-3.0` -o main.o 在跑步时,我得到以下警告- 在\u窗口\u主\u目录上找不到信号处理程序“”。你是用-rdnamic编译的吗 GTKBuilder实际上不是设计成与C++或其他语言中的信号回调接口;C++函数是所谓的名字被修改,这意味着一个特定函数的实名可能与源代码中函数的名称有很大的不同。您的

然后这个

g++ -c -g -O0 -Wall -pthread -pipe src/main.cpp -lcurl `pkg-config --cflags --libs gtk+-3.0` -o main.o
在跑步时,我得到以下警告-

在\u窗口\u主\u目录上找不到信号处理程序“”。你是用-rdnamic编译的吗


GTKBuilder实际上不是设计成与C++或其他语言中的信号回调接口;C++函数是所谓的名字被修改,这意味着一个特定函数的实名可能与源代码中函数的名称有很大的不同。您的

on_window_main_destroy
函数实际上可能有这样一个名称:
\u Zxl65Abvon_window_main_destroy xxj
,具体取决于使用的编译器。这样做是为了对函数的名称空间、参数类型和返回值等进行编码,以便重载可以工作,也就是说,您可以使用两个或多个不同的函数,这些函数的名称看起来相同,但接受或返回不同的参数

因此,我建议在
窗口
上使用
g\u信号连接
功能,如下所示:

g++ -o temp_app main.o -pthread `pkg-config --cflags --libs gtk+-3.0`
-export-dynamic
但是,如果必须引用构建器文件中的回调,则使用
extern“C”{}
块围绕回调函数,如下所示:

g_signal_connect (window, "destroy", G_CALLBACK (on_window_main_destroy), NULL);
…或者把事情简化一点:

extern "C"
{
    void on_window_main_destroy()
    {
        gtk_main_quit();
    }
}

您也可以在这里使用快捷方式,只需将构建器文件中的回调设置为
gtk\u main\u quit
。通过这样做,您可以避免创建自己的函数。

查看
destory
看起来您有一个打字错误。
on\u window\u main\u destory
vs
on\u window\u main\u destroy
拼写正确-只是我在这个论坛上键入的内容。glade和.cpp都有相同的拼写“on_window\u main\u destroy”,我建议您提出您的问题,以便它准确地反映您的问题。编辑的行为也会引起更多人的注意。
extern "C"
{
    void on_window_main_destroy()
    {
        gtk_main_quit();
    }
}
extern "C" void on_window_main_destroy()
{
    gtk_main_quit();
}