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

Привет! Я пытаюсь скомпилировать 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.

3
задан 1 March 2013 в 10:14

2 ответа

Закомментируйте строку, содержащую g_type_init. Это должно решить проблему.

0
ответ дан 1 March 2013 в 10:14

(на самом деле я не знаю, что это значит)

Что означает, что начиная с 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, который используется многими программами.

игнорировать проверки на ошибки.

Флаг -Wall в команде gcc указывает gcc пометить все предупреждения, и вот уже несколько лет по умолчанию gcc обрабатывает все предупреждения как ошибки. Если вы зададите этот вопрос на многих сайтах, респонденты просто скажут вам выполнить поиск в Интернете.

Если бы вы проверили страницу руководства для gcc, то обнаружили бы, что лучший способ справиться с конкретной проблемой устаревшей функции - это добавить

-Wno-deprecated-декларации

[ 1112] команде gcc, чтобы просто проигнорировать это и при этом сохранить безопасность проверки всех других предупреждений с помощью -Wall

0
ответ дан 1 March 2013 в 10:14

Другие вопросы по тегам:

Похожие вопросы: