ソースからコンパイルするときに glib-2.35.x の「g type_init は非推奨です」エラーを修正する方法

ソースからコンパイルするときに 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

答え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 などの汎用ライブラリの場合は、複数のバージョンをインストールしてください。

エラーチェックを無視します。

gcc コマンドの -Wall フラグは、すべての警告にフラグを立てるように gcc に指示します。ここ数年、gcc のデフォルト状態はすべての警告をエラーとして扱うようになっています。多くのサイトでこの質問をすると、回答者は単に Web 検索をするように言うでしょう。

gccのマニュアルページを確認すると、非推奨関数の特定の問題に対処する最善の方法は、以下を追加することであることがわかります。

-Wno非推奨宣言

gccコマンドに-Wallオプションを追加して、それを無視し、他のすべての警告をチェックする安全性を維持する。

答え2

を含む行をコメントアウトしますg_type_init。これで問題は解決するはずです。

関連情報