gtk_init()意外失败

gtk_init()意外失败,gtk,x11,raspberry-pi,Gtk,X11,Raspberry Pi,我使用树莓pi和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

我使用树莓pi和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);
}
而且很成功。运行时,我得到:

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


仅供参考,我正在使用putty SSH来制作树莓。你似乎对你所做的事情很陌生,所以我想到了两件事

  • (如前所述)您需要一个正在运行的xserver实例
  • 您的
    DISPLAY
    bash变量是否产生正确的显示(AFAIK gtk+-2.0尊重这一点,同时确保正确导出它)
  • xhost+
    允许从另一个终端访问当前的xserver(注意这有严重的安全问题,有关详细信息,请阅读并参考xhost手册页-无快捷方式!)
详情请参阅


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

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

  • (如前所述)您需要一个正在运行的xserver实例
  • 您的
    DISPLAY
    bash变量是否产生正确的显示(AFAIK gtk+-2.0尊重这一点,同时确保正确导出它)
  • xhost+
    允许从另一个终端访问当前的xserver(注意这有严重的安全问题,有关详细信息,请阅读并参考xhost手册页-无快捷方式!)
详情请参阅


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

这些错误是因为gtk_init失败了。您应该检查gtk_check_init的返回值,不要再继续。这并不能解决您的问题。其他gtk应用程序可以工作吗?我可以使用什么gtk应用程序进行测试?例如,您是否在计算机中运行XWindow服务器?(服务器就是显示器)。您希望应用程序显示在什么显示器上?我希望应用程序可以在当前终端上显示屏幕。我尝试将其设置为我的ip地址0.0,但没有效果。这些错误是因为gtk_init失败。您应该检查gtk_check_init的返回值,不要再继续。这并不能解决您的问题。其他gtk应用程序可以工作吗?我可以使用什么gtk应用程序进行测试?例如,您是否在计算机中运行XWindow服务器?(服务器就是显示器)。您希望应用程序显示在什么显示器上?我希望应用程序可以在当前终端上显示屏幕。我尝试将其设置为我的ip地址0.0,但没有效果。谢谢。我是GUI方面的新手。现在我已经安装了一个cygwin xwin服务器,在远程服务器上解决了这个问题,在本地服务器上,使用startx和xhost+也可以解决我的问题。我没有意识到应该有一个服务器来接受GUI实例:)谢谢。我是GUI方面的新手。现在我已经安装了一个cygwin xwin服务器,在远程服务器上解决了这个问题,在本地服务器上,使用startx和xhost+也可以解决我的问题。我没有意识到应该有一个服务器来接受GUI实例:)
(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