
Hallo, ich versuche, Gnome-Packagekit aus dem Quellcode zu kompilieren git://git.gnome.org/gnome-packagekit
und wenn ich es versuche, make
erhalte 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_init
scheint es auch mit Prüfungen zusammenzuhängen . Die Ausgabe von istwperror
autogen.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 glib
oder 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.