我在Ubuntu 14.04 32位下使用QtCreator和QT 5.2.1制作了一个QT应用程序。我使用了QT框架的二进制分布。我遵循了所有关于部署QT应用程序的教程,在Ubuntu 14.04的新安装中,一切似乎都很好。Ubuntu 12.04出现了问题。当我尝试运行我的应用程序时,我会遇到Glib错误。
(进程:11884):GLib GObject CRITICAL**:/build/buildd/glib2.0-2.32.4/./goject/gtype.c:2722:您忘记调用g_type_init()
(进程:11884):GLib CRITICAL**:g_once_init_leave:断言`result!=0'失败
(进程:11884):GLib GObject CRITICAL**:/build/buildd/glib2.0-2.32.4/./goject/gtype.c:2722:您忘记调用g_type_init()
(进程:11884):GLib GObject CRITICAL**:/build/buildd/glib2.0-2.32.4/./goject/gtype.c:2722:您忘记调用g_type_init()
(进程:11884):GLib GObject CRITICAL**:/build/buildd/glib2.0-2.32.4/./goject/gtype.c:2722:您忘记调用g_type_init()
(进程:11884):GLib GObject CRITICAL**:g_type_add_interface_static:断言`g_type_IS_INSTANTIATABLE(instance_type)'失败
(进程:11884):GLib GObject CRITICAL**:/build/buildd/glib2.0-2.32.4/./goject/gtype.c:2722:您忘记调用g_type_init()
(进程:11884):GLib GObject CRITICAL**:g_type_interface_add_presecondition:断言`g_type_IS_interface(interface_type)'失败
(进程:11884):GLib CRITICAL**:g_once_init_leave:断言`result!=0'失败
(进程:11884):GLib GObject CRITICAL**:g_type_add_interface_static:断言`g_type_IS_INSTANTIATABLE(instance_type)'失败
(进程:11884):GLib GObject CRITICAL**:/build/buildd/glib2.0-2.32.4/./goject/gtype.c:2722:您忘记调用g_type_init()
有人能帮我修理这些吗?感谢
第1版:该应用程序使用sudo运行,没有错误,但它不显示图标(libappindicator1)
错误消息告诉您问题出在哪里:
GLib-GObject-CRITICAL... You forgot to call g_type_init()
在2.36之前的GLib库版本中,应用程序需要调用g_type_init
函数来初始化库的GObject类型系统,而您的程序显然没有这样做。(请注意,你的程序构建的库可能使用了GLib,而不是你的实际代码。)据推测,Ubuntu12附带的GLib版本比Ubuntu14旧,这就是它们之间行为差异的原因。
尝试在程序的main
函数开始时将此代码添加到程序中:
if (glib_check_version (2, 36, 0) != NULL)
g_type_init ();
你可能还需要在文件的顶部添加这个include,如果它还没有出现的话:
#include <glib-object.h>
请注意,如果您使用的是最新版本的GLib,那么在代码中出现g_type_init
可能会触发编译器的警告。如果这是一个问题,你可以添加
#define GLIB_DISABLE_DEPRECATION_WARNINGS
在代码的最顶部处(在包含GLib标头之前),以防止出现这种情况。