为什么 GTK 会发出大量(看似)不相关的警告?
Why is GTK spewing a ton of (seemingly) irrelevant warnings?
这是一个创建应用程序指示器的非常简单的 GTK 应用程序:
#include <gtk/gtk.h>
#include <libappindicator/app-indicator.h>
int main()
{
AppIndicator *indicator;
GtkWidget *menu;
GtkWidget *item1;
GtkWidget *item2;
GtkWidget *separator;
indicator = app_indicator_new("testapp", "distributor-logo", APP_INDICATOR_CATEGORY_APPLICATION_STATUS);
menu = gtk_menu_new();
app_indicator_set_menu(indicator, GTK_MENU(menu));
app_indicator_set_status(indicator, APP_INDICATOR_STATUS_ACTIVE);
item1 = gtk_menu_item_new_with_label("Item 1");
item2 = gtk_menu_item_new_with_label("Item 2");
separator = gtk_separator_menu_item_new();
gtk_widget_show(item1);
gtk_widget_show(item2);
gtk_widget_show(separator);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), item1);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), separator);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), item2);
gtk_main();
return 0;
}
我使用以下命令编译了应用程序:
gcc `pkg-config --cflags appindicator-0.1` -o testapp testapp.c \
`pkg-config --libs appindicator-0.1`
应用程序按预期运行并显示指标。但是,它发出大量警告,似乎 与我的应用程序没有任何关系。您可以查看完整列表 here,但这里是前几个:
(process:17410): Gtk-CRITICAL **: IA__gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
(process:17410): GLib-GObject-WARNING **: invalid (NULL) pointer instance
(process:17410): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed
(process:17410): GLib-GObject-WARNING **: invalid (NULL) pointer instance
这些警告是什么意思,我该如何修复我的应用程序以防止它们首先被引发?
通过在开头添加以下行,我能够使所有警告消失:
gtk_init(&argc, &argv);
我也修改了main()
的签名为main(int argc, char **argv)
。
这是一个创建应用程序指示器的非常简单的 GTK 应用程序:
#include <gtk/gtk.h>
#include <libappindicator/app-indicator.h>
int main()
{
AppIndicator *indicator;
GtkWidget *menu;
GtkWidget *item1;
GtkWidget *item2;
GtkWidget *separator;
indicator = app_indicator_new("testapp", "distributor-logo", APP_INDICATOR_CATEGORY_APPLICATION_STATUS);
menu = gtk_menu_new();
app_indicator_set_menu(indicator, GTK_MENU(menu));
app_indicator_set_status(indicator, APP_INDICATOR_STATUS_ACTIVE);
item1 = gtk_menu_item_new_with_label("Item 1");
item2 = gtk_menu_item_new_with_label("Item 2");
separator = gtk_separator_menu_item_new();
gtk_widget_show(item1);
gtk_widget_show(item2);
gtk_widget_show(separator);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), item1);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), separator);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), item2);
gtk_main();
return 0;
}
我使用以下命令编译了应用程序:
gcc `pkg-config --cflags appindicator-0.1` -o testapp testapp.c \
`pkg-config --libs appindicator-0.1`
应用程序按预期运行并显示指标。但是,它发出大量警告,似乎 与我的应用程序没有任何关系。您可以查看完整列表 here,但这里是前几个:
(process:17410): Gtk-CRITICAL **: IA__gtk_icon_theme_get_for_screen: assertion 'GDK_IS_SCREEN (screen)' failed
(process:17410): GLib-GObject-WARNING **: invalid (NULL) pointer instance
(process:17410): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed
(process:17410): GLib-GObject-WARNING **: invalid (NULL) pointer instance
这些警告是什么意思,我该如何修复我的应用程序以防止它们首先被引发?
通过在开头添加以下行,我能够使所有警告消失:
gtk_init(&argc, &argv);
我也修改了main()
的签名为main(int argc, char **argv)
。