你好,我正在尝试从源代码编译 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 版本 2.35.0 或更高版本编译较旧的 glib 程序时,您应该编辑代码以在 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)尤其如此。
忽略错误检查。
gcc 命令中的 -Wall 标志告诉 gcc 标记所有警告,几年来,gcc 的默认状态是将所有警告视为错误。如果你在许多网站上问这个问题,回复者会简单地告诉你去网上搜索。
如果你查看 gcc 的手册页,你会发现处理弃用函数的特定问题的最佳方法是添加
-Wno-弃用声明
到 gcc 命令以便忽略它,同时仍然保持使用 -Wall 检查所有其他警告的安全
答案2
注释掉包含 的行g_type_init
。这应该可以解决问题。