gtk_init()意外失败

时间:2013-03-07 11:41:17

标签: gtk x11 raspberry-pi

我正在使用带有GTK +的raspberry pi,意思是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变量并尝试将其设置为&lt;我的IP&gt;:0.0但没有效果。我怀疑这可能是GTK无法获得显示资源的问题,但我找不到解决这个问题的方法。

仅供参考我使用putty SSH连接raspberryPi。

1 个答案:

答案 0 :(得分:1)

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

  • (如前所述)您需要运行正在运行的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文档/主题,网上有大量过时的东西。