Привет! Я пытаюсь скомпилировать 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
.
Закомментируйте строку, содержащую g_type_init
. Это должно решить проблему.
(на самом деле я не знаю, что это значит)
blockquote>Что означает, что начиная с 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
blockquote>Вы можете указать компилятору и компоновщику использовать более старую или более новую версию, что по умолчанию, но, очевидно, вам нужно установить эту версию, что может привести к проблемам с другими программами, пытающимися использовать неправильную версию библиотеки glib.
Таким образом, как правило, устанавливайте несколько версий библиотеки только в крайнем случае, особенно для библиотек общего назначения, таких как glib, который используется многими программами.
игнорировать проверки на ошибки.
blockquote>Флаг -Wall в команде gcc указывает gcc пометить все предупреждения, и вот уже несколько лет по умолчанию gcc обрабатывает все предупреждения как ошибки. Если вы зададите этот вопрос на многих сайтах, респонденты просто скажут вам выполнить поиск в Интернете.
Если бы вы проверили страницу руководства для gcc, то обнаружили бы, что лучший способ справиться с конкретной проблемой устаревшей функции - это добавить
-Wno-deprecated-декларации
[ 1112] команде gcc, чтобы просто проигнорировать это и при этом сохранить безопасность проверки всех других предупреждений с помощью -Wall