代码之家  ›  专栏  ›  技术社区  ›  luckyee

gtk_init()意外失败

  •  1
  • luckyee  · 技术社区  · 12 年前

    我使用树莓派与GTK+,意思是ARM+Debian+GTK+。但即使是GTK网站的例子在我的环境中也总是失败。比如:

    #include <gtk/gtk.h>
    
    int main( int   argc,
          char *argv[] )
    {
    GtkWidget *window;
    
    //gtk_init (&argc, &argv);
    gtk_init_check(&argc, &argv);
    
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_widget_show  (window);
    
    gtk_main ();
    
    return(0);
    }
    

    我用汇编的

    gcc -g gtktest.cpp -o base `pkg-config gtk+-2.0 --cflags --libs` 
    

    并取得了成功。运行时,我得到了:

    (base:12760): GLib-GObject-WARNING **: invalid (NULL) pointer instance
    
    (base:12760): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed
    
    (base:12760): Gtk-WARNING **: Screen for GtkWindow not set; you must always set
    a screen for a GtkWindow before using the window
    
    (base:12760): Gdk-CRITICAL **: IA__gdk_screen_get_default_colormap: assertion `GDK_IS_SCREEN (screen)' failed
    
    (base:12760): Gdk-CRITICAL **: IA__gdk_colormap_get_visual: assertion `GDK_IS_COLORMAP (colormap)' failed
    
    (base:12760): Gdk-CRITICAL **: IA__gdk_screen_get_default_colormap: assertion `GDK_IS_SCREEN (screen)' failed
    
    (base:12760): Gdk-CRITICAL **: IA__gdk_screen_get_root_window: assertion `GDK_IS_SCREEN (screen)' failed
    
    (base:12760): Gdk-CRITICAL **: IA__gdk_screen_get_root_window: assertion `GDK_IS_SCREEN (screen)' failed
    
    (base:12760): Gdk-CRITICAL **: IA__gdk_window_new: assertion `GDK_IS_WINDOW (parent)' failed
    Segmentation fault
    

    仅使用gtk_init()也会导致错误。 我检查了DISPLAY变量,并尝试将其设置为<我的IP>:0.0,但没有效果。我怀疑这可能是GTK无法获得显示资源的问题,但我没有找到解决这个问题的方法。

    仅供参考,我正在使用腻子SSH到raspberryPi。

    1 回复  |  直到 12 年前
        1
  •  1
  •   drahnr    12 年前

    你似乎对你所做的事情很陌生,所以我想到了两件事

    • (如前所述)您需要一个正在运行的xserver实例
    • 你的 DISPLAY bash变量产生正确的显示(AFAIK gtk+-2.0尊重这一点,并确保它被正确导出)
    • xhost + 允许从另一个终端访问您当前的xserver( 笔记 这有严重的安全问题,详细信息请阅读 http://www.tldp.org/LDP/intro-linux/html/sect_10_05.html 并参考xhost手册页-没有捷径!)

    有关详细信息,请阅读 http://www.hungry.com/~jamie/xexport.html

    注意xserver文档/主题,网上有很多过时的东西。

    推荐文章