将QT5应用程序部署到ubuntu 12.04

时间:2014-09-08 12:56:52

标签: ubuntu deployment qt-creator qt5 glib

我使用QtCreator和QT 5.2.1在Ubuntu 14.04 32bit下制作了QT应用程序。我使用了QT框架的二进制分发。我按照关于部署QT应用程序的所有教程和Ubuntu 14.04的全新安装,一切似乎都没问题。问题来自Ubuntu 12.04。当我尝试运行我的应用程序时,我得到了那些Glib错误。

  

(进程:11884):GLib-GObject-CRITICAL **:/build/buildd/glib2.0-2.32.4/./gobject/gtype.c:2722:你忘了调用g_type_init()

     

(进程:11884):GLib-CRITICAL **:g_once_init_leave:断言`结果!= 0'失败

     

(进程:11884):GLib-GObject-CRITICAL **:/build/buildd/glib2.0-2.32.4/./gobject/gtype.c:2722:你忘了调用g_type_init()

     

(进程:11884):GLib-GObject-CRITICAL **:/build/buildd/glib2.0-2.32.4/./gobject/gtype.c:2722:你忘了调用g_type_init()

     

(进程:11884):GLib-GObject-CRITICAL **:/build/buildd/glib2.0-2.32.4/./gobject/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/./gobject/gtype.c:2722:你忘了调用g_type_init()

     

(进程:11884):GLib-GObject-CRITICAL **:g_type_interface_add_prerequisite:断言`G_TYPE_IS_INTERFACE(interface_type)'失败

     

(进程:11884):GLib-CRITICAL **:g_once_init_leave:断言`结果!= 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/./gobject/gtype.c:2722:你忘了调用g_type_init()

任何人都可以帮我解决这些问题吗? 感谢

EDIT1: 该应用程序使用sudo运行,没有错误,但它不显示图标(libappindicator1)

1 个答案:

答案 0 :(得分:2)

错误消息告诉您问题所在:

GLib-GObject-CRITICAL... You forgot to call g_type_init()

在2.36之前的the GLib library版本中,应用程序需要调用g_type_init函数来初始化库GObject type system,显然您的程序没有这样做。 (注意它可能是你的程序构建的库,它使用的是GLib,而不是你的实际代码。)据推测,Ubuntu 12附带的旧版本的GLib比Ubuntu 14还要多,这说明了它们之间的行为差​​异。

尝试在main功能开始时将此代码添加到您的程序中:

if (glib_check_version (2, 36, 0) != NULL)
  g_type_init ();

如果文件尚未存在,您可能还需要在文件顶部添加此包含:

#include <glib-object.h>

请注意,如果您针对最新版本的GLib进行构建,则代码中存在g_type_init可能会触发编译器发出警告。如果这是一个问题,您可以添加

#define GLIB_DISABLE_DEPRECATION_WARNINGS

在代码的顶部(包括GLib标题之前)以防止这种情况发生。