
Привет, я пытаюсь скомпилировать gnome-packagekit из исходного кода git://git.gnome.org/gnome-packagekit
, и когда я пытаюсь, make
я получаю ошибку, указанную выше.
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
Я посмотрел это, и, похоже, это потому, что glib-2.35.4 объявил g_type_init
вызов устаревшим. (Я на самом деле не знаю, что это значит). По мнению некоторых комментаторов, это также связано с wperror
проверками. Вывод 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
Что говорит о том, что это может иметь какое-то отношение к делу.
Интересно, есть ли простой способ указать компилятору использовать старую версию glib
или игнорировать werror
проверки.
решение1
(Я на самом деле не знаю, что это значит)
Это означает, что начиная с версии glib 2.35.0 функция g_type_init больше не должна использоваться, поскольку ее планируют удалить из библиотеки в какой-то момент в будущем.
Поэтому при компиляции старых программ glib с glib версии 2.35.0 или выше вам следует отредактировать код, чтобы включить проверку g_type_init
#if !GLIB_CHECK_VERSION(2,35,0)
g_type_init ();
#endif
На первый взгляд кажется, что g_type_init будет исключен только для glib 2.35.0, но макрос LIB_CHECK_VERSION на самом деле определен так, чтобы возвращать значение true для той же или более поздней/новой версии, чем указанная.
Интересно, есть ли простой способ указать компилятору использовать старую версию glib?
Вы можете указать компилятору и компоновщику использовать более старую или новую версию, чем та, что используется по умолчанию, но, очевидно, вам необходимо установить эту версию, что может привести к проблемам с другими программами, пытающимися использовать неправильную версию библиотеки glib.
Поэтому, как правило, устанавливайте несколько версий библиотеки только в крайнем случае, особенно это касается библиотек общего назначения, таких как glib, которые используются многими программами.
игнорировать проверки werror.
Флаг -Wall в команде gcc сообщает gcc о необходимости отмечать все предупреждения, и вот уже несколько лет gcc по умолчанию обрабатывает все предупреждения как ошибки. Если вы зададите этот вопрос на многих сайтах, ответчики просто посоветуют вам выполнить веб-поиск.
Если бы вы проверили страницу руководства для gcc, вы бы обнаружили, что лучший способ решения конкретной проблемы устаревшей функции — это добавить
-Wno-устаревшие-объявления
к команде gcc, чтобы просто проигнорировать это и при этом сохранить безопасность проверки всех других предупреждений с помощью -Wall
решение2
Закомментируйте строку, содержащую g_type_init
. Это должно решить проблему.