如何纠正从源代码编译时出现的 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 版本 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。这应该可以解决问题。

相关内容