2014-09-08 6 views
1

J'ai fait une application QT sous Ubuntu 14.04 32bit en utilisant QtCreator et QT 5.2.1. J'ai utilisé la distribution binaire du framework QT. J'ai suivi tout le tutoriel sur le déploiement de l'application QT et sur une nouvelle installation d'Ubuntu 14.04 tout semble correct. Les problèmes viennent avec Ubuntu 12.04. Quand j'essaye d'exécuter mon application j'obtiens ces erreurs de Glib.Déployer l'application QT5 sur Ubuntu 12.04

(processus: 11884): GLib-GObject CRITIQUES **: /build/buildd/glib2.0-2.32.4/./gobject/gtype.c:2722: Vous avez oublié d'appeler g_type_init()

(processus: 11884): GLib CRITIQUES **: g_once_init_leave: `affirmation result = 0' a échoué

(processus: 11884): GLib-GObject CRITIQUES **:/build/buildd/glib2 .0-2.32.4 /./gobject/gtype.c: 2722: Vous avez oublié d'appeler g_type_init()

(processus: 11884): GLib-GObject-CRITICAL **: /build/buildd/glib2.0 -2.32.4 /./ gobject/gtype.c: 2722: Vous avez oublié ca ll g_type_init()

(processus: 11884): GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.32.4/./gobject/gtype.c:2722: Vous avez oublié d'appeler g_type_init()

(processus: 11884): GLib-GObject CRITIQUES **: g_type_add_interface_static: affirmation `G_TYPE_IS_INSTANTIATABLE (instance_type) » a échoué

(processus: 11884): GLib-GObject CRITIQUES **:/build /buildd/glib2.0-2.32.4/./gobject/gtype.c:2722: Vous avez oublié d'appeler g_type_init()

(processus: 11884): GLib-GObject-CRITICAL **: g_type_interface_add_prerequisite: assertion ` G_TYPE_IS_INTERF ACE (interface_type) » a échoué

(processus: 11884): GLib CRITIQUES **: g_once_init_leave:` affirmation result = 0' a échoué

(processus: 11884): GLib-GObject CRITIQUES **: g_type_add_interface_static: affirmation `G_TYPE_IS_INSTANTIATABLE (instance_type) » a échoué

(processus: 11884): GLib-GObject CRITIQUES **: /build/buildd/glib2.0-2.32.4/./gobject/gtype.c:2722 : Vous avez oublié d'appeler g_type_init()

Quelqu'un peut-il m'aider à résoudre ces problèmes? Merci

Edit1: L'application fonctionne avec sudo, sans les erreurs, mais il ne montre pas l'icône (libappindicator1)

Répondre

2

Les messages d'erreur vous disent quel est le problème:

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

Dans les versions de the GLib library avant 2,36, les applications devaient appeler une fonction g_type_init pour initialiser GObject type system de la bibliothèque et apparemment votre programme ne le fait pas. (Notez qu'il pourrait s'agir d'une bibliothèque que votre programme utilise pour utiliser GLib, pas votre code actuel.) Ubuntu 12 est probablement livré avec une version plus ancienne de GLib qu'Ubuntu 14 et cela explique la différence de comportement entre eux.

Essayez d'ajouter ce code à votre programme dès le début de sa fonction main:

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

Vous devrez peut-être ajouter cette inclure au début du fichier, si elle est pas déjà présent:

#include <glib-object.h> 

Notez que si vous construisez contre une version récente de GLib, ayant g_type_init présent dans votre code peut déclencher un avertissement du compilateur. Si c'est un problème, vous pouvez ajouter

#define GLIB_DISABLE_DEPRECATION_WARNINGS 

au très haut de votre code (avant l'en-tête GLib est inclus) pour empêcher cela.

+0

Wow ça a marché! J'ai remarqué que l'application démarre correctement avec sudo mais sans sudo, elle nécessite g_type_init pour s'exécuter sur ubuntu 12.04 vanilla. Le problème est que je ne peux pas utiliser la macro GLIB_MAJOR_VERSION parce que je développe sur Ubuntu 14.04 avec un glib 2.40. – Indio

+0

J'ai modifié ma réponse pour suggérer d'utiliser une vérification de version d'exécution au lieu d'une vérification de version au moment de la compilation. Cela a plus de sens, puisque (si je comprends bien) vous construisez _ sur Ubuntu 14 mais _deploying_ sur Ubuntu 12. S'il vous plaît essayez ceci et faites-moi savoir si c'est une meilleure solution. –