So beheben Sie den Fehler „g type_init ist veraltet“ in glib-2.35.x beim Kompilieren aus der Quelle

So beheben Sie den Fehler „g type_init ist veraltet“ in glib-2.35.x beim Kompilieren aus der Quelle

Hallo, ich versuche, Gnome-Packagekit aus dem Quellcode zu kompilieren git://git.gnome.org/gnome-packagekitund wenn ich es versuche, makeerhalte ich den obigen Fehler

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

Ich habe das nachgeschlagen und es scheint daran zu liegen, dass glib-2.35.4 den Aufruf veraltet hat . (Ich weiß nicht wirklich, was das bedeutet). Laut einigen Kommentatoren g_type_initscheint es auch mit Prüfungen zusammenzuhängen . Die Ausgabe von istwperrorautogen.sh

            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

Das lässt darauf schließen, dass dies etwas damit zu tun haben könnte.

Ich frage mich, ob es eine einfache Möglichkeit gibt, dem Compiler mitzuteilen, dass er die alte Version verwenden gliboder Prüfungen ignorieren soll werror.

Antwort1

(Ich weiß eigentlich nicht, was das bedeutet)

Dies bedeutet, dass ab Glib-Version 2.35.0 die Funktion g_type_init nicht mehr verwendet werden sollte, da sie zu einem späteren Zeitpunkt aus der Bibliothek entfernt werden soll.

Wenn Sie also ältere Glib-Programme mit der Glib-Version 2.35.0 oder höher kompilieren, sollten Sie den Code bearbeiten, um einen Test um g_type_init zu setzen

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

Zunächst sieht es so aus, als ob g_type_init nur für glib 2.35.0 ausgeschlossen würde, aber das Makro LIB_CHECK_VERSION ist tatsächlich so definiert, dass es für dieselbe oder eine höhere/neuere Version als die angegebene „true“ zurückgibt.

Ich frage mich, ob es eine einfache Möglichkeit gibt, dem Compiler mitzuteilen, dass er die alte Version von glib verwenden soll

Sie können den Compiler und den Linker anweisen, eine ältere oder neuere Version als die Standardversion zu verwenden. Natürlich muss diese Version aber installiert sein, was sehr wohl zu Problemen mit anderen Programmen führen kann, die versuchen, die falsche Version der Glib-Bibliothek zu verwenden.

Installieren Sie mehrere Versionen einer Bibliothek daher grundsätzlich nur als letztes Mittel. Dies gilt insbesondere für allgemeine Bibliotheken wie glib, die von vielen Programmen verwendet werden.

um Werror-Prüfungen zu ignorieren.

Das Flag -Wall im gcc-Befehl weist gcc an, alle Warnungen zu kennzeichnen. Seit einigen Jahren ist es der Standardzustand von gcc, alle Warnungen als Fehler zu behandeln. Wenn Sie diese Frage auf vielen Websites stellen, werden Sie von den Antwortenden einfach aufgefordert, eine Websuche durchzuführen.

Wenn Sie die Manualpage für gcc überprüfen, werden Sie feststellen, dass der beste Weg, um mit dem spezifischen Problem einer veralteten Funktion umzugehen, darin besteht,

-Wkeine veralteten Deklarationen

zum gcc-Befehl, um das einfach zu ignorieren und trotzdem die Sicherheit zu haben, alle anderen Warnungen mit -Wall zu überprüfen

Antwort2

Kommentieren Sie die Zeile mit aus g_type_init. Damit sollte das Problem gelöst sein.

verwandte Informationen