
Olá, estou tentando compilar o gnome-packagekit a partir do código-fonte git://git.gnome.org/gnome-packagekit
e quando tento make
recebo o erro acima
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
Eu pesquisei isso e parece que o glib-2.35.4 desativou a g_type_init
chamada. (na verdade não sei o que isso significa). Também parece estar relacionado a wperror
verificações, segundo alguns comentaristas. A saída de 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
O que sugere que isso pode ter algo a ver com isso.
Gostaria de saber se existe uma maneira fácil de dizer ao compilador para usar a versão antiga glib
ou ignorar werror
as verificações.
Responder1
(na verdade não sei o que isso significa)
O que isso significa é que a partir da versão 2.35.0, a função g_type_init não deve mais ser usada porque a intenção é removê-la da biblioteca em algum momento no futuro.
Portanto, ao compilar programas simplificados mais antigos com a versão 2.35.0 ou superior, você deve editar o código para testar g_type_init
#if !GLIB_CHECK_VERSION(2,35,0)
g_type_init ();
#endif
A princípio, parece que g_type_init será excluído apenas para o glib 2.35.0, mas a macro LIB_CHECK_VERSION está de fato definida para retornar true para a versão igual ou superior/mais recente que a especificada.
Gostaria de saber se existe uma maneira fácil de dizer ao compilador para usar a versão antiga do glib
Você pode instruir o compilador e o vinculador a usar uma versão mais antiga ou mais recente que a padrão, mas obviamente você precisa ter essa versão instalada, o que pode muito bem levar a problemas com outros programas que tentam usar a versão errada da biblioteca superficial.
Portanto, como regra geral, instale apenas várias versões da biblioteca como último recurso, especialmente para bibliotecas de uso geral, como glib, que é usada por tantos programas.
para ignorar verificações de erros.
O sinalizador -Wall no comando gcc diz ao gcc para sinalizar todos os avisos e, há alguns anos, o estado padrão do gcc é tratar todos os avisos como erros. Se você fizer essa pergunta em muitos sites, os respondentes simplesmente lhe dirão para fazer uma pesquisa na web.
Se você verificasse a página de manual do gcc, descobriria que a melhor maneira de lidar com o problema específico de uma função obsoleta é adicionar
-Wno-declarações obsoletas
ao comando gcc para simplesmente ignorar isso e ainda manter a segurança de verificar todos os outros avisos com -Wall
Responder2
Comente a linha que contém g_type_init
. Isso deve resolver o problema.