zoukankan      html  css  js  c++  java
  • 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 */
  • 相关阅读:
    rsync的man手册(未完成)
    rsync基础
    命令:mktemp
    命令:install
    [Abp vNext 源码分析]
    异常吞噬问题一则
    使用 Polly 实现复杂策略(超时重试)
    在 DotNetty 中实现同步请求
    使用 C# 实现 CJ-T188 水表协议和 DL-T645 电表协议的解析与编码
    DevExpress 使用 GridControl 时,数据源无法立即更新的问题
  • 原文地址:https://www.cnblogs.com/marklove/p/14274001.html
Copyright © 2011-2022 走看看