как исправить ошибку glib-2.35.x «g type_init is deprecated» при компиляции из исходного кода

как исправить ошибку glib-2.35.x «g type_init is deprecated» при компиляции из исходного кода

Привет, я пытаюсь скомпилировать 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. Это должно решить проблему.

Связанный контент