gcc dll 导出问题 GTK+Glade3 Gtk-WARNING **: Could not find signal handler 问题最终解析

加载路径问题
const char *GLADE_PATH1 = "C:msys64homefreemass24-linux etradio etradio.glade";

GTK + 使用 Glade3 编程时,调用自动信号连接

gtk_builder_connect_signals();

编译时不出现任何问题,但是运行时提示

Gtk-WARNING **: Could not find signal handle

可能产生的原因:

Windows 平台:

1)callback 函数没加 G_MODULE_EXPORT

宏定义如下:

#ifdef G_PLATFORM_WIN32
#  define    G_MODULE_EXPORT       __declspec(dllexport)
#else /* !G_PLATFORM_WIN32 */
#  define    G_MODULE_EXPORT
#endif /* !G_PLATFORM_WIN32 */

2)编译选项没加 -export-dynamic

加入之前
void PresetClicked(GtkButton *obj, gpointer data)
{
}
加入之后
G_MODULE_EXPORT void PresetClicked(GtkButton *obj, gpointer data)
{
}

Linux 平台:

1)忘加编译选项 -export-dynamic

2)如果使用 C++ 编译器,由于C++ 有名字粉碎(C++ symbol mangling), GTK+是C程序,需使用c风格的回调函数

 函数声明前加上 extern “C”   或者使用 extern "C" { ......................}

3)当然 修改G_MODULE_EXPORT 的宏定义,在回调函数定义前加G_MODULE_EXPORT宏也可以

#ifdef G_PLATFORM_WIN32
#  define    G_MODULE_EXPORT  __declspec(dllexport)
#else /* !G_PLATFORM_WIN32 */
#  define    G_MODULE_EXPORT  extern "C"
#endif /* !G_PLATFORM_WIN32 */
原文地址:https://www.cnblogs.com/marklove/p/14274001.html