web-dev-qa-db-fra.com

comment corriger glib-2.35.x 'erreur g type_init est obsolète' lors de la compilation depuis les sources

Bonjour, j'essaie de compiler gnome-packagekit à partir de la source git://git.gnome.org/gnome-packagekit et lorsque j'essaie de make j'obtiens l'erreur ci-dessus.

error: ‘g_type_init’ is deprecated (declared at /usr/local/include/glib-2.0/gobject/gtype.h:669) [-Werror=deprecated-declarations]
cc1: all warnings being treated as errors

J'ai consulté cette information et cela semble être dû au fait que glib-2.35.4 a déconseillé d'appeler l'appel g_type_init. (Je ne sais pas vraiment ce que cela signifie). Il semble également être lié aux vérifications wperror selon certains commentateurs. La sortie de autogen.sh est

            gnome-packagekit 3.7.6
          =============================

prefix:                    /usr/local
compiler:                  gcc
cflags:                    -g -O2
cppflags:                   -Werror -Wall -Wreturn-type -Wdeclaration-after-statement -Wno-uninitialized -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Winline -Wformat-nonliteral -Wformat-security -Wswitch-default -Winit-self -Wmissing-include-dirs -Wno-strict-aliasing -Wundef -Waggregate-return -Wmissing-format-attribute -g -fexceptions                    gnome-packagekit 3.7.6
              =============================

    prefix:                    /usr/local
    compiler:                  gcc
    cflags:                    -g -O2
    cppflags:                   -Werror -Wall -Wreturn-type -Wdeclaration-after-statement -Wno-uninitialized -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Winline -Wformat-nonliteral -Wformat-security -Wswitch-default -Winit-self -Wmissing-include-dirs -Wno-strict-aliasing -Wundef -Waggregate-return -Wmissing-format-attribute -g -fexceptions

Ce qui suggère que cela pourrait avoir quelque chose à voir avec cela.

Je me demande s’il existe un moyen simple de dire au compilateur d’utiliser l’ancienne version de glib ou d’ignorer les vérifications werror.

3
Tahnoon Pasha

(Je ne sais pas vraiment ce que cela signifie)

Cela signifie que, à partir de la version 2.35.0 de glib, la fonction g_type_init ne doit plus être utilisée car son intention est de la supprimer ultérieurement de la bibliothèque.

Ainsi, lors de la compilation d'anciens programmes glib avec la version 2.35.0 ou supérieure de glib, vous devez éditer le code pour tester g_type_init.

#if !GLIB_CHECK_VERSION(2,35,0)
g_type_init ();
#endif

Au début, cela donne à penser que g_type_init ne sera exclu que pour glib 2.35.0 mais la macro LIB_CHECK_VERSION est en fait définie pour renvoyer true pour la même version ou une version plus récente que celle spécifiée.

Je me demande s’il existe un moyen simple de dire au compilateur d’utiliser l’ancienne version de glib

Vous pouvez demander au compilateur et à l'éditeur de liens d'utiliser une version plus ancienne ou plus récente que la version par défaut, mais il est évident que vous devez installer cette version, ce qui peut entraîner des problèmes avec d'autres programmes essayant d'utiliser la mauvaise version de la bibliothèque glib.

Donc, en règle générale, installez uniquement plusieurs versions de la bibliothèque en dernier recours, surtout pour les bibliothèques à usage général telles que glib qui est utilisé par de nombreux programmes.

ignorer les vérifications werror.

L'indicateur -Wall de la commande gcc indique à gcc de signaler tous les avertissements. Depuis quelques années, l'état par défaut de gcc consiste à traiter tous les avertissements comme des erreurs. Si vous posez cette question sur de nombreux sites, les répondants vous demanderont simplement de faire une recherche sur le Web.

Si vous vérifiez la page de manuel de gcc, vous constaterez que le meilleur moyen de traiter le problème spécifique d’une fonction déconseillée est d’ajouter:

-Wno-deprecated-declarations

à la commande gcc afin d’ignorer cela tout en conservant la sécurité de la vérification de tous les autres avertissements avec -Wall

3
J G Miller

Mettez en commentaire la ligne contenant g_type_init. Cela devrait résoudre le problème.

0
user202243